希望对正则表达式的知识有所了解,我决定阅读一本关于它们的书,介绍正则表达式.而且我知道这很愚蠢,但其中一个介绍性的例子对我来说没有意义.
(\d)\d\1
Run Code Online (Sandbox Code Playgroud)
示范文本:
123-456-7890
Run Code Online (Sandbox Code Playgroud)
(应该捕获第一个数字,123)
谁能解释一下这里发生了什么?
据我所知,第一个\d捕获数字123. \1反向引用(标记)该组以供以后使用.括号限制了组的范围.但第二个\d是什么呢?
首选简单解释,如小孩或金毛猎犬.
\d只是一位数.
这个正则表达式与"123-456-7890"字符串不匹配但它匹配"323"(例如,它可能是更大字符串的一部分"323-456-7890"):
(\d) : first digit ("3")
\d : another digit ("2")
\1 : first group (which was "3")
Run Code Online (Sandbox Code Playgroud)
现在,如果你的书假装(\d)\d\1应该捕获"123"在"123-456-7890",那么它可能包含一个错误...
(\d)\d\1 一步步:
\d匹配一个数字()将此标记为捕获组 - 这是第一个,因此数字被记为"组1"\d说有另一个数字\1 说"这是我们之前的第1组的值" - 这是在步骤1中匹配的数字.所以就像已经说过的破坏:正则表达式应该匹配三个数字的序列,其中第一个和第三个相等.