2010-07-21 24 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]+/