繁体   English   中英

preg_match捕获时间段\\。 在非捕获组中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM