PHP查找不在正则表达式中的单词

时间:2010-07-21 13:56:45

标签: php regex

我在PHP中编写了正则表达式/^[A-Za-z0-9-_\s]*$/,它允许使用数字,字母,空格,连字符和下划线。我想显示那些对正则表达式无效的匹配,即“我的名字是Blahblah !!!”应该给我“!!!”输出

4 个答案:

答案 0 :(得分:10)

使用字符类中的插入符号来反转匹配并删除开头(^)和结束($)字符:

/[^A-Za-z0-9-_\s]+/

http://php-regex.blogspot.com/2008/01/how-to-negate-character-class.html

答案 1 :(得分:2)

如果用空字符串替换所有匹配项,那么你将得到不匹配的部分:

preg_replace('/[A-Za-z0-9-_\s]+/', '', $string)

这适用于任意正则表达式,但对于您的特定正则表达式@Andy的解决方案更简单。

请注意,我删除了锚点^$以使其正常工作。

答案 2 :(得分:0)

preg_replace("/^[A-Za-z0-9-_\s]*$/","","My Name is Blahblah!!!") // Output: "!!!"

或者,如果你想要他们的所有分组

preg_split("/^[A-Za-z0-9-_\s]*$/","","My Name is Blahblah!!!")

答案 3 :(得分:0)

你必须把连字符 - 放在字符类的开头或结尾处或者转义它,所以你的正则表达式是:

/[^-A-Za-z0-9_\s]+/

/[^A-Za-z0-9_\s-]+/

/[^A-Za-z0-9\-_\s]+/