Kim*_*Kim 3 php regex preg-match php-5.3
我不知道为什么除了输入之外还有2个匹配使用这个正则表达式,当我预期只有1个匹配.
preg_match(/_(\d(-\d){0,3})\./,$str,$matches);
Run Code Online (Sandbox Code Playgroud)
在此文件字符串格式上name_A-B-C-D.ext.
我期望得到像这样的单一比赛:
Example A
[0] => name_A-B-C-D.ext
[1] => A-B-C-D
Example B
[0] => name_A-B-C.ext
[1] => A-B-C
Run Code Online (Sandbox Code Playgroud)
但这是我得到的结果:
Example A
[0] => name_A-B-C-D.ext
[1] => A-B-C-D
[2] => -D
Example B
[0] => name_A-B-C.ext
[1] => A-B-C
[2] => -C
Run Code Online (Sandbox Code Playgroud)
我只希望捕捉A到D它之前是否连字符.这段代码是可用的,我可以简单地忽略第二场比赛,但我想知道为什么它在那里.我只能假设它与我的两个捕获组有关.我的错误在哪里?
是的,您获得了两次捕获,因为正则表达式中有两个捕获组.
为避免不必要的捕获,您可以使用非捕获组(?:...):
/_(\d(?:-\d){0,3})\./
Run Code Online (Sandbox Code Playgroud)