[英]Regular expressions - How to control whether parenthesis mark a sub group or do something else (PHP - preg_match)
如何控制正则表达式中的圆括号是否标记一个子组,是否做其他事情或两者都做?
例如,如果我有诸如“ AA12345”和“ AB12345”之类的字符串,并且我想对前两个始终为AA或AB的字母进行preg_match设置,则我可以:
preg_match('/(A(A|B)).*/',$string,$matches);
(我为这个问题放了。*,因为字符串的其余部分无关紧要)
通过这种设置,假设$ string =“ AA12345”,我得到的是$ matches =
Array
(
[0] => AA12345
[1] => AA
[2] => A
)
结果我不需要或想要“ [2] => A”,但是我不能从正则表达式中删除括号,因为OR运算符需要它们。 我该如何处理? 只是忽略结果,还是有更好的方法?
您可以使用(?:...)
形式的“非捕获组”:
preg_match('/(A(?:A|B)).*/',$string,$matches);
正如文档所述 :
如果左括号后面跟有“?:”,则该子图案不执行任何捕获,并且在计算任何后续捕获子图案的数量时不进行计数。 例如,如果字符串“白色皇后”与模式匹配,则捕获的子字符串((?:red | white)(king | queen))为“白色皇后”和“女王”,并分别编号为1和2 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.