【问题标题】:preg_match_all alpha+accented, but not numericpreg_match_all 字母+重音,但不是数字
【发布时间】:2013-01-14 16:48:16
【问题描述】:

我想使用 PHP 的 preg_match_all 来捕获包含以下内容的子字符串:

  • A-Z、a-z、所有重音字符;
  • 空间;
  • 连字符。

它不能捕获包含其他任何内容的字符串,包括数字字符。

这个例子很接近,但也捕获了包含数字字符的字符串:

preg_match_all("/([\w -]+)/u", $abigstring, $matches);

【问题讨论】:

  • 你想只匹配 ASCII 重音字符还是包括 Unicode?​​span>
  • @GigaWatt:“所有重音字母”。

标签: php regex preg-match-all regex-negation


【解决方案1】:

这是 Unicode 属性的工作:

preg_match_all("/([\p{L} -]+)/u", $abigstring, $matches);

\p{L} 匹配任何具有 Unicode 属性“字母”的字符。

【讨论】:

  • 天才。感谢那。任何其他搜索的人都可以查找这个地球魔术 Tim 调用的 Unicode 属性:regular-expressions.info/unicode.html 正则表达式的整个方面都可以在这里探索!
【解决方案2】:

这也是一种选择:

preg_replace("/[^A-Za-zÀ-ÿ -]+/u", "", "juana 123456 sfdf 423 999 _ -a- dsa & ç%& à à$¨à+", -1);

这是一个工作示例 -> https://xrg.es/#17hyhfm

【讨论】:

  • 这也替换了不需要的连字符-
  • @M42 你是对的!我忘记了连字符。我编辑了我的答案,现在一切都很好。
  • 好的,+1 可替代\pL。不过我觉得\pL更方便。
【解决方案3】:

对于那些想要的人,这里是对上面代码的更正,它不起作用!

preg_match("/^([\p{L} -]+)$/u", $string)

锚(^ 和 $)丢失

编辑:好多了。如果连字符/空格只允许在中间:

/^([\p{L}](?:[\p{L} -]+[\p{L}])?)$/u

【讨论】:

  • 你在哪里看到他要捕获所有的字符串?
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2012-12-03
  • 2023-02-03
  • 2016-04-02
相关资源
最近更新 更多