Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex ?:正则表达式中的符号_Regex - Fatal编程技术网

Regex ?:正则表达式中的符号

Regex ?:正则表达式中的符号,regex,Regex,对于我的一个类,我必须描述以下正则表达式: \b4[0-9]{12}(?:[0-9]{3})\b 我知道它选择了一个数字:以4开头,后面是12位数字(每个数字在0-9之间),后面是另外3位数字 我不明白的是带分号的问号(?:…)。我试着在网上寻找这意味着什么,但我发现的链接有些混乱;我希望有人能给我一个关于问号在这个例子中的作用的快速基本概念。它被称为“非捕获组”,这意味着正则表达式不会像其他方法那样通过父对象内部的匹配生成组(通常,括号创建组)这将是一个简短的回答 当您使用(?:)时,这意味

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

\b4[0-9]{12}(?:[0-9]{3})\b
我知道它选择了一个数字:以4开头,后面是12位数字(每个数字在0-9之间),后面是另外3位数字


我不明白的是带分号的问号(?:…)。我试着在网上寻找这意味着什么,但我发现的链接有些混乱;我希望有人能给我一个关于问号在这个例子中的作用的快速基本概念。

它被称为“非捕获组”,这意味着正则表达式不会像其他方法那样通过父对象内部的匹配生成组(通常,括号创建组)这将是一个简短的回答

当您使用
(?:)
时,这意味着
已匹配,但未被捕获用于反向引用,即非捕获组。它不会存储在内存中,以便以后引用

例如:

(34)5\1

这个正则表达式表示您正在查找
34
,后面是
5
,然后是
34
。当然,你可以把它写成
34534
,但有时
捕获的组
是一个复杂的模式,你无法事先预测

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


替换时也使用反向引用

例如:

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

此正则表达式将查找
多个
大写字母,后跟
多个
数字。我想用大写字母替换整个模式

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

如果您更改为
(?:[A-Z]+)[0-9]+
,则将不再捕获它,因此无法被引用回来


?:用于表示非捕获组。你可以参考