2010-07-21 44 views
1

我在PHP中使用了正则表达式/^[A-Za-z0-9-_\s]*$/,它允许使用数字,字母,空格,连字符和下划线。我想显示那些对正则表达式无效的比赛,例如“我的名字是布拉比!!!”应该给我“!!!”输出。PHP查找不在正则表达式中的词

+0

@ jason4:你需要有这个问题的任何进一步的帮助? :-) – 2010-09-02 16:56:41

+1

感谢Andy E,胡萝卜总是适合我:) – Maximus 2010-09-17 23:15:03

回答

10

使用插入符号符号的字符类里面反转匹配并删除启动(^)和结束($)字符:

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

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

+0

你想摆脱那些锚,并将'*'改成'+'。 OP正试图从字符串中抽取匹配,而不是匹配整个事情。 – 2010-07-21 14:11:06

+0

@Alan:是的,开始和结束的锚点都消失了。感谢编辑提示'+'上的提示。 – 2010-07-21 15:01:27

2

如果更换所有与比赛空串然后你会得到不匹配的部分:

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

这将工作对于任何任意的正则表达式,但对于你的具体正则表达式@安迪的解决方案更简单。

请注意,我删除了锚点^$以完成此项工作。

+1

您应该将'*'改为'+'。否则,你会浪费很多时间用什么都不换。 ;) – 2010-07-21 14:06:15

0

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

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

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

0

你必须把hiphen - 在开始时或在字符类的末尾或逃避它,所以你的正则表达式是:

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

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

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