[英]preg_match capturing period \. in non-capturing group
我似乎无法避免在简单的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." }
这里发生了什么??
您在捕获组中放置了一个非捕获组,因此它将成为捕获的匹配结果的一部分。 为避免这种情况,您可以将可选点放置在捕获组之外。
(st)\.?
改用前瞻性
$pattern = '/(st(?=\.))/i';
preg_match($pattern, '1617 5th ST.',$match);
var_dump($match);
仅匹配ST
(st)(?:\.)?
您需要的是这里.
您的正则表达式(st(?:\\.)?)
在这里.
被捕获在主要
^ ^
group1 group2(non capturing but inside group1)
分组以及ST
您已要求不捕获第二个分组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.