我似乎無法保持在簡單的PHP preg_match中捕獲時間段!preg_match捕捉週期。在非捕獲組
$pattern = '/(st(?:\.)?)/i';
preg_match($pattern, '1617 5th ST.',$match);
var_dump($match);
打印:
array(2) { [0]=> string(3) "ST." [1]=> string(3) "ST." }
這到底是怎麼回事?
我似乎無法保持在簡單的PHP preg_match中捕獲時間段!preg_match捕捉週期。在非捕獲組
$pattern = '/(st(?:\.)?)/i';
preg_match($pattern, '1617 5th ST.',$match);
var_dump($match);
打印:
array(2) { [0]=> string(3) "ST." [1]=> string(3) "ST." }
這到底是怎麼回事?
您有一個非捕獲組放置在捕獲組內,因此它將成爲捕獲的匹配結果的一部分。爲避免這種情況,您可以將可選點放置在捕獲組之外。
(st)\.?
使用向前看,而不是
$pattern = '/(st(?=\.))/i';
preg_match($pattern, '1617 5th ST.',$match);
var_dump($match);
比賽只ST
(st)(?:\.)?
你需要的是this.Your正則表達式(st(?:\.)?)
這裏.
主
^^
group1 group2(non capturing but inside group1)
羣體是越來越抓獲連同你已經要求你的第二組不被捕獲。
你爲什麼捕捉'st'?一個簡單的'/ st \。?/'是同樣的事情。 – sln 2014-10-29 18:26:53
好問題: /(st(?:\.|reet)?|b(?:lvd\.?|oulevard))/i等地址匹配 – blisstdev 2014-10-29 18:57:59
'/ st(?:(?= \。) | reet)?| b(?:lvd(?= \。)| oulevard)/ i'巴姆,沒有點,沒有捕獲組。 – sln 2014-10-29 19:03:10