preg_match_all alpha +重音,但不是数字

时间:2013-01-14 16:48:17

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

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

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

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

此示例已关闭,但也会捕获包含数字字符的字符串:

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

3 个答案:

答案 0 :(得分:3)

这是Unicode属性的工作:

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

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

答案 1 :(得分:2)

这也是一个选择:

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

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

答案 2 :(得分:0)

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

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

失去了锚点(^和$)

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

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