2013-04-29 99 views
0
if (preg_match('/[^a-zA-Z]+/', $test4, $matches)) 

這將匹配任何非字母數字字符。我只想要{ } [ ] * =的一場比賽,無論他們之間的順序和任何其他字符。這可以做到嗎?preg_match匹配特定字符= {} [] *

我試過\=, \[, \], \{, \}, \*但這似乎沒有幫助?

我有一個可能包含或不包含列出的字符的字符串。我想使用preg_match來確定字符串是否包含任何這些字符,而不管字符串中的順序或位置。

+0

我不明白你想做什麼。請更清楚並寫下你想要的例子。和你期望的輸出。 – Niels 2013-04-29 17:02:46

+0

嗨。我有一個可能包含或不包含列出的字符的字符串。 我想使用preg_match找出字符串是否包含任何這些字符,而不管字符串中的順序或位置。 – JeffVader 2013-04-29 17:44:06

回答

2

這是做你想做的嗎?

if (preg_match ('/[{}\[\]=*]+/', $test4, $matches)) 

如果你想找到所有的比賽,而不是僅僅是第一,你應該使用preg_match_all

+0

我現在已經卷曲了。 'if(preg_match('/ [\ [\] =] + /',$ test4))' - 這似乎工作。 如果我想像上面那樣匹配,但在括號內包括任何單詞,可以這樣做嗎?即:[list]? – JeffVader 2013-04-29 17:32:34

0

這些字符(等號除外)是正則表達式中的控制字符。你將不得不對待他們。

我會推薦閱讀PCRE Regex Syntax

爲了讓你在找什麼,試試這個。

preg_match('/\[(.*)\]/', $test4, $square_matches); 
preg_match('/\{(.*)\}/', $test4, $curly_matches); 

// or, if this is your approach (it's hard to tell from your description) 
preg_match('/([\[\{=\*](.*)[\]\}=\*])/', $test4, $matches); 
preg_match('/([\[\{=\*](.*?)[\]\}=\*])/', $test4, $matches); //non-greedy 
+0

花括號和'*'在括號內沒有特殊的含義,它們不需要被轉義。 – Barmar 2013-04-29 17:35:50

+0

@Barmar:與開場方括號一樣:) – 2013-04-29 21:33:02