Bar*_*ers 8

不,(?=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
        )

)


And*_*ong 5

Lookarounds总是非捕获和零宽度.