?: 在正则表达式中是什么意思?

Sar*_*nan 8 regex perl regex-group

请解释这个正则表达式的含义以及该表达式将生成哪些组?

$string =~ m/^(\d*)(?: \D.*?)(\d*)$/
Run Code Online (Sandbox Code Playgroud)

PS:我正在将 Perl 代码重构为 Java。

Сух*_*й27 10

这意味着它不是捕获组。成功匹配后,第一个(\d*)将在 中被捕获$1,第二个在 中$2,并且(?: \D.*?)根本不会被捕获。

$string =~ m/^(\d*)(?: \D.*?)(\d*)$/
Run Code Online (Sandbox Code Playgroud)

perldoc perlretut

非捕获分组

需要捆绑一组备选方案的组作为捕获组可能有用也可能没有用。如果不是,它只会在正则表达式内部和外部对可用捕获组值集创建一个多余的添加。由(?:regexp)表示的非捕获分组仍然允许将正则表达式视为单个单元,但不要同时建立捕获组。