希望对正则表达式的知识有所了解,我决定阅读一本关于它们的书,介绍正则表达式。我知道这很愚蠢,但其中一个介绍性的例子对我来说没有意义。
(\d)\d\1
示例文字:
123-456-7890
(应捕获第一个数字,123
)
有人能解释一下这里发生了什么吗?
据我所知,第一个\d
捕获了数字123. \1
反向引用(标记)该组以供以后使用。括号限制了组的范围。但第二个\d
做了什么?
简单的解释,比如小孩或金毛猎犬都是首选。
答案 0 :(得分:9)
\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"
,那么它可能包含错误...
答案 1 :(得分:5)
(\d)\d\1
一步一步:
\d
匹配一位数()
将此标记为捕获组 - 这是第一个,因此数字会被记为“组1”\d
表示还有另一个数字\1
说“这是我们之前的第1组的值” - 这是在步骤1中匹配的数字。所以就像已经说过的破坏:正则表达式应该匹配三位数的序列,其中第一个和第三个相等。