我一直在这个网站和网上阅读一些关于非捕获组的文章(例如http://www.regular-expressions.info/brackets.html和http://www.asiteaboutnothing.net/regexp/正则表达式,disambiguation.html,什么的"?^?"正则表达式的意思是,什么是一个非捕获组什么是一个问号后面跟一个冒号(?:)是什么意思?)
我很清楚(?:foo)的含义.我不清楚的是(?= foo).(?= foo)也总是非捕获组,还是依赖?
不,(?=foo)不会捕获"foo".任何环视断言(前后都是负面和正面)都不会捕获,而只会检查文本的存在(或不存在).
例如,正则表达式:
(X(?=\d+))
Run Code Online (Sandbox Code Playgroud)
"X"只有当它后面有一个或多个数字时才匹配.但是,这些数字不是匹配组1的一部分.
您可以定义捕获内部前瞻捕捉到它.例如,正则表达式:
(X(?=(\d+)))
Run Code Online (Sandbox Code Playgroud)
"X"只有当它后面有一个或多个数字时才匹配.并且这些数字在匹配组2中捕获.
一个PHP演示:
<?php
$s = 'X123';
preg_match_all('/(X(?=(\d+)))/', $s, $matches);
print_r($matches);
?>
Run Code Online (Sandbox Code Playgroud)
将打印:
Array
(
[0] => Array
(
[0] => X
)
[1] => Array
(
[0] => X
)
[2] => Array
(
[0] => 123
)
)