2016-05-29 68 views
2

我有一個preg_match匹配特定模式,但它只是不匹配我試圖匹配的模式。我究竟做錯了什麼?使用preg_match來匹配這個特定模式

<?php 

$string = "tell me about cats"; 
preg_match("~\b(?:tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+){1,2})$~", $string, $match); 
print_r($match); 

?> 

預期結果:

陣列(0 =>告訴我1 =>貓)

實際結果:

陣列()

+0

https://regex101.com/r/cN8yO2/1在右手邊是什麼意思的一切解釋。 – Mike

+0

有用的工具:[http://regexr.com/](http://regexr.com/) –

回答

2

你在有額外的空間(但之後沒有空格3210使得整個正則表達式失敗)

((?:[a-z]+){1,2}) 
      ^^ 
      || 
     here 

也,你沒有捕獲組的第一部分(由於(?:..)。做一個捕獲組,並使用?空間可選的(如果你想最多兩個詞來捕捉)

\b(tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+){1,2} ?)$ 

Regex Demo

PHP代碼

$string = "tell me about cats"; 
preg_match("~\b(tell me about|you know(?: of| about)?|what do you think(?: of| about)?|(?:what|who) is|(?:whats|whos)) ((?:[a-z]+ ?){1,2})$~", $string, $match); 
print_r($match); 

: - $match[1]$match[2]將包含您的結果。 $match[0]被保留用於字符串中正則表達式的整個匹配。

Ideone Demo

+0

我把{1,2}放在最後的原因是因爲我想匹配一個或兩個單詞,但是在至少有一個。刪除空間使其只能匹配一個單詞。 – frosty

+0

@frosty也更新了答案 – rock321987