基本

后引用用于匹配先前由捕获组匹配的相同文本。这有助于重复使用模式的先前部分并确保两个字符串匹配。

例如,如果你要验证字符串是否有从 0 到 9 的数字,分隔符,如连字符,斜杠,甚至空格,小写字母,另一个分隔符,然后从 0 到 9 的另一个数字,你可以使用这样的正则表达式:

[0-9][-/ ][a-z][-/ ][0-9]

这将匹配 1-a-4,但它符合 1-a/41 a-4。如果我们希望分隔符匹配,我们可以使用捕获组和后引用。后引用将查看在指示的捕获组中找到的匹配,并确保后引用的位置完全匹配。

使用我们的相同示例,正则表达式将成为:

[0-9]([-/ ])[a-z]\1[0-9]

\1 表示模式中的第一个捕获组。通过这个小变化,正则表达式现在匹配 1-a-41 a 4 但不匹配 1 a-41-a/4

用于反向引用的数字取决于捕获组的位置。数字可以是 1 到 9,可以通过计算捕获组来找到。

([0-9])([-/ ])[a-z][-/ ]([0-9])
|--1--||--2--|          |--3--|

嵌套捕获组稍微更改此计数。首先计算外部捕获组,然后计算下一级,然后继续直到离开巢:

(([0-9])([-/ ]))([a-z])
 |--2--||--3--|
|-------1------||--4--|