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