捕获与反向引用
在一些表达式中往往用()将一些正则表达式圈起来,这就是分组,里面的内容往往被当作一个整体来处理。
而在一个正则表达式中一旦用了()那么第一个()想再次引用就可以写为\1,依次类推\2\3\4等等,这就是反向引用,它被认为是再次匹配同一个字符串的快捷指令。
例子:
捕获组与非捕获组
以上那些从左到右计算其开括号来编号的也叫捕获组。
那有些是以(?)开头的我们叫非捕获组。
表达式 | 解释 |
---|---|
(?=X ) | 零宽度正先行断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。也就是说要使此零宽度断言起到我们想要的效果的话,就必须把这个非捕获组放在整个表达式的右侧。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 |
(?!X) | 零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,/w+(?!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。 |
(?<=X) | 零宽度正后发断言。仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。 |