regex - 无法理解捕获组和反向引用

标签 regex

为了让我对正则表达式的知识有所了解,我决定阅读一本关于正则表达式的书,介绍正则表达式。我知道这很愚蠢,但其中一个介绍性示例对我来说没有意义。

(\d)\d\1

示例文本:
123-456-7890

(应该捕获第一个数字, 123 )

谁能解释一下这里发生了什么?

据我所知,第一个 \d 捕获数字 123。 \1 反向引用(标记)该组以供以后使用。括号限制了组的范围。但是第二个 \d 有什么作用呢?

简单的解释,像 child 或金毛猎犬是首选。

最佳答案

\d 只是 一个 数字。

此正则表达式与 "123-456-7890" 字符串不匹配,但它会匹配 "323" (它可能是更大字符串的一部分,例如 "323-456-7890" ):

 (\d) : first digit ("3")
 \d   : another digit ("2")
 \1   : first group (which was "3")

现在,如果你的书假设 (\d)\d\1 应该在 "123" 中捕获 "123-456-7890" ,那么它可能包含一个错误......

关于regex - 无法理解捕获组和反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21880127/

相关文章:

javascript - javascript 中的 reg ex 仅允许特定的电话号码格式 (123) 456-7890

regex - fs.writefile 仅在 Node js 中的最后一个函数中执行

javascript - 传递一个函数以用正则表达式替换,并将 match 作为 arg

正则表达式:如何匹配不仅仅是数字的字符串

javascript - 正则表达式查找所有至少包含一个星号的单词

java - 实时验证 JTextField 的输入

c# - 如何使用仅替换 www 的第一次出现

javascript - 使用正则表达式匹配字符串的相同开始和结束字符

regex - VBS 使用通配符比较字符串

php - @(at) 符号 preg_replace 函数