2011-11-26 440 views
2

我使用了一個在線正則表達式測試器來構建一個簡單的正則表達式,但是使用php的preg_match它給出了一個未知的修飾符$。php正則表達式 - 從字符串的開始和結尾匹配

這裏是正則表達式:

if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches)) 

我試圖做的是檢查,如果$輸入等於或者關鍵字1 /或關鍵字2 /(精確匹配)。我知道我可以很容易地用「if($ input =='Keyword1 /')」做到這一點,但我寧願有幾行正則表達式與代碼中的一打if語句。

有人幫我解決嗎?

+1

注意,你也可以使用關鍵字允許的數組和'in_array' – 2011-11-26 12:32:41

回答

4

你需要躲避正則表達式內/,因爲/也被用來作爲分隔符:

if (preg_match('/(^Keyword1\/$|^Keyword2\/$)/', $input, $matches)) 
         ^  ^

或者使用不同的分隔符:

if (preg_match('~(^Keyword1/$|^Keyword2/$)~', $input, $matches)) 
       ^      ^

因爲兩個你子regexs有共同的錨你可以簡化你的正則表達式爲:

if (preg_match('~^(Keyword1|Keyword2)/$~', $input, $matches)) 

爲什麼在你的正則表達式中的警告?

'/(^Keyword1/$|^Keyword2/$)/' 

由於您使用/作爲分隔符,第二/在你的正則表達式使得PHP認爲這是你的正則表達式的結束。現在PHP在結束分隔符後接受正則表達式修飾符,如s,m,i。但在你的情況下,PHP在結束分隔符後看到一個$。由於$是不是一個有效修改你得到警告:

PHP的警告:的preg_match():未知的修飾 '$' 在...

+0

正是我需要的,謝謝! – Joe

1

的問題是,你使用的/在你的正則表達式中,而不是逃避它。

這裏就是你要找的東西,但也許更好一點:

'/^(Keyword1|Keyword2)\\/$/' 
1

什麼:

preg_match('/^Keyword[1-2]\/$/', $input, $matches) 
+0

'[12]'會做同樣的事情,但我會假定「keyword1」只是一個例子,而不是他正在尋找的* actual *字符串。 – nickf

+0

@nickf是的沒錯 – 2011-11-26 12:30:31

相關問題