基本
后引用用于匹配先前由捕获组匹配的相同文本。这有助于重复使用模式的先前部分并确保两个字符串匹配。
例如,如果你要验证字符串是否有从 0 到 9 的数字,分隔符,如连字符,斜杠,甚至空格,小写字母,另一个分隔符,然后从 0 到 9 的另一个数字,你可以使用这样的正则表达式:
[0-9][-/ ][a-z][-/ ][0-9]
这将匹配 1-a-4
,但它也符合 1-a/4
或 1 a-4
。如果我们希望分隔符匹配,我们可以使用捕获组和后引用。后引用将查看在指示的捕获组中找到的匹配,并确保后引用的位置完全匹配。
使用我们的相同示例,正则表达式将成为:
[0-9]([-/ ])[a-z]\1[0-9]
\1
表示模式中的第一个捕获组。通过这个小变化,正则表达式现在匹配 1-a-4
或 1 a 4
但不匹配 1 a-4
或 1-a/4
。
用于反向引用的数字取决于捕获组的位置。数字可以是 1 到 9,可以通过计算捕获组来找到。
([0-9])([-/ ])[a-z][-/ ]([0-9])
|--1--||--2--| |--3--|
嵌套捕获组稍微更改此计数。首先计算外部捕获组,然后计算下一级,然后继续直到离开巢:
(([0-9])([-/ ]))([a-z])
|--2--||--3--|
|-------1------||--4--|