我正试图从所有标点符号中删除文本,但由于文本是西班牙语,我无法使用[A-Za-z0-9]。 我找到了这个正则表达式:
trim(preg_replace('#[^\p{L}\p{N}]+#u', ' ', $str)
这似乎可以完成这项工作,但我想保留两个特殊字符@和#,我该如何实现呢?
额外的问题:如何删除所有只是数字的字符串?例如123将被删除但不是as5623。
提前致谢!
答案 0 :(得分:1)
您可以简单地将这些字符添加到您的否定类中以保留它们。并且一定要将模式分隔符更改为#
以外的其他内容。
~[^\p{L}\p{N}@#]+~u
要删除所有数字字符串,您可以在模式周围放置单词边界\b
。
\b\d+\b
注意:字边界不会消耗任何字符。它断言,一方面有一个字符,而另一方则没有。
答案 1 :(得分:1)
您也可以使用posix字符类。
/[^[:alnum:]@#]+/
但是对于这两个特殊字符,你只需要在字符类中添加它。
要删除所有包含正则表达式后面的单词的唯一数字。
/\b[[:digit:]]+\b/