回溯引用介绍
参考《正则表达式必知必会》
[美] Ben Forta 著
杨涛 等译
假设你希望把正则表达式里某个匹配出来的项目提取出来,如
我是 Hanson ,欢迎您!我弟弟是 Hanson,Hanson,他也欢迎您!
,使用正则提取出 Hanson
这个值,可以用下面的正则提取
[a-zA-Z]+
但是如果你希望在同一个正则里面提取出上述选项并继续使用该正则表达式,则需要使用回溯引用。回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。
对于上面的文本,我们使用以下回溯引用
([a-zA-Z]+),\1
匹配的结果是Hanson,Hanson
,其中
\1
表明这是一个回溯引用,而它引用的是前面划分出来的那个子表达式\1
引用的子表达式需要用括号()
包裹
VS Code 使用子表达式批量替换
假设你的代码里有一大堆类似如下的内容
Language.Resources.KeyWord
你需要批量替换为
Style.LangManager.GetValueByKey("KeyWord")
如果你使用 Language\.Resources\.[a-zA-Z]+
,你会发现 KeyWord 没法同时在左右加上双引号和括号,这个时候就需要使用回溯引用,如下所示
搜索:Language\.Resources\.([a-zA-Z]+)
替换:Style.LangManager.GetValueByKey("$1")
其中,替换里的 $1
指向的是搜索里的 ([a-zA-Z]+)
有些 IDE 使用的是
\1
指向子表达式,VSCode 使用的是$1