我似乎无法在简单的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." }
这里发生了什么?
答案 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
一起。你已经要求你的第二组被捕获。