?:正则表达式中的表示法

r-g*_*-s- 44 regex

对于我的一个类,我必须描述以下正则表达式:

\b4[0-9]{12}(?:[0-9]{3})\b
Run Code Online (Sandbox Code Playgroud)

我知道它选择一个数字:从4开始,后跟12位数字(每个在0-9之间),然后是另外3位数字.

我不明白的是带分号的问号(?:....).我试过在线查找这意味着什么,但我发现的链接有些令人困惑; 我希望有人可以快速了解问号在这个例子中的作用.

小智 75

这将是简短的回答.

当您使用(?:)它时意味着group匹配但未捕获用于反向引用,即非捕获组.它没有存储在内存中以便稍后引用.

例如:

(34)5\1

这个正则表达式意味着你正在寻找34接着5然后又一次34.当然你可以把它写成34534但有时这captured group是一个你手头无法预测的复杂模式.

因此,捕获组匹配的任何内容都应该再次出现.

用于反向引用的Regex101演示


替换时也使用反向引用.

例如:

([A-Z]+)[0-9]+

此正则表达式将查找many大写字母后跟many数字.我希望仅通过找到大写字母来替换整个模式.

然后我将替换整个模式,使用\1哪个代表反向引用第一个捕获的组.

Regex101演示用于更换

如果更改(?:[A-Z]+)[0-9]+为此将不再捕获它,因此无法返回参考.

针对非捕获组的Regex101演示

现场回答.


Pou*_*Bak 13

这就是所谓的"非捕获组",这意味着正则表达式将不会让一组由匹配parenteses里面像它本来做(通常,一个括号创建一个组).