我希望整理一下我的正则表达式知识,所以决定翻阅一本关于它们的书籍——《正则表达式简介》。但是我知道这很傻,其中一个引言的例子对我来说没有意义。
(\d)\d\1
示例文字:
123-456-7890
(应该捕获第一个数字,123
)
有人能解释一下这是怎么回事吗?
据我所知,第一个 \d
捕获了数字 123。而 \1
回溯(标记)该组以供后续使用。括号限定了该组的作用范围。但第二个 \d
是用来做什么的呢?
请用小孩或金毛犬都能听懂的简单解释。
我希望整理一下我的正则表达式知识,所以决定翻阅一本关于它们的书籍——《正则表达式简介》。但是我知道这很傻,其中一个引言的例子对我来说没有意义。
(\d)\d\1
示例文字:
123-456-7890
(应该捕获第一个数字,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")
如果您的书声称(\d)\d\1
应该在"123-456-7890"
中捕获"123"
,那么它可能包含一个错误...
(\d)\d\1
逐步解析:
\d
匹配一个数字。()
标记这个为捕获组 - 这是第一个,所以数字被记作“组 1”。\d
表示有另一个数字。\1
意味着“这里是我们先前组 1 匹配的值” - 即第一步匹配的数字。因此,就像 dystroy 已经说过的那样:这个正则表达式匹配的是一个由三个数字组成的序列,其中第一个和第三个数字相等。