我在regex101.com测试这个
正则表达式: ^\+([0-9A-Za-z-]+)(?:\.([0-9A-Za-z-]+))*$
测试字符串: +beta-bar.baz-bz.fd.zz
字符串匹配,但“匹配信息”框显示只有两个捕获组:
MATCH 1 1. [1-9]
beta-bar2. [20-22]
zz``
我期待所有这些捕获:
-
beta-bar
-
baz-bz
-
fd
-
zz
为什么句点之间的每个标识符都不被识别为自己捕获的组?
我在regex101.com测试这个
正则表达式: ^\+([0-9A-Za-z-]+)(?:\.([0-9A-Za-z-]+))*$
测试字符串: +beta-bar.baz-bz.fd.zz
字符串匹配,但“匹配信息”框显示只有两个捕获组:
MATCH 1 1. [1-9]
beta-bar2. [20-22]
zz``
我期待所有这些捕获:
beta-bar
baz-bz
fd
zz
为什么句点之间的每个标识符都不被识别为自己捕获的组?
1 回答
发生这种情况的原因是因为在捕获组上使用量词并且捕获n次时,只有最后捕获的文本存储在缓冲区中并在最后返回 .
您可以使用简单的正则表达式
preg_split
来代替匹配这些部分:见IDEONE demo
结果: