php:除了字母数字unicode和两个字符之外的所有内容

时间:2014-07-08 14:57:33

标签: php regex

我正试图从所有标点符号中删除文本,但由于文本是西班牙语,我无法使用[A-Za-z0-9]。 我找到了这个正则表达式:

trim(preg_replace('#[^\p{L}\p{N}]+#u', ' ', $str)

这似乎可以完成这项工作,但我想保留两个特殊字符@和#,我该如何实现呢?

额外的问题:如何删除所有只是数字的字符串?例如123将被删除但不是as5623。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以简单地将这些字符添加到您的否定类中以保留它们。并且一定要将模式分隔符更改为#以外的其他内容。

~[^\p{L}\p{N}@#]+~u

要删除所有数字字符串,您可以在模式周围放置单词边界\b

\b\d+\b

注意:字边界不会消耗任何字符。它断言,一方面有一个字符,而另一方则没有。

答案 1 :(得分:1)

您也可以使用posix字符类。

/[^[:alnum:]@#]+/

但是对于这两个特殊字符,你只需要在字符类中添加它。

要删除所有包含正则表达式后面的单词的唯一数字。

/\b[[:digit:]]+\b/
相关问题