preg_match捕获期间\。在非捕获组中

时间:2014-10-29 18:12:36

标签: php regex preg-match

我似乎无法在简单的PHP 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." }  

这里发生了什么?

3 个答案:

答案 0 :(得分:1)

您有一个非捕获组放置在捕获组内,因此它将成为捕获的匹配结果的一部分。为避免这种情况,您可以将可选点放在捕获组之外。

(st)\.?

答案 1 :(得分:0)

使用前瞻

$pattern = '/(st(?=\.))/i';
preg_match($pattern, '1617 5th ST.',$match);

var_dump($match);

仅匹配ST

答案 2 :(得分:0)

(st)(?:\.)?

你需要的是这个。你的正则表达式(st(?:\.)?)在这里.被捕获在主

                           ^  ^ 
                      group1  group2(non capturing but inside group1)

组与ST一起。你已经要求你的第二组被捕获。