Notepad++多行含$字符子串的批量匹配替换正则方案
最简正则表达式实现含$子串的全局替换需求
需求说明
匹配代码中所有包含$的子串,统一替换为TEST,具体规则:
- 子串可位于引号
""内或外部 $不一定是子串的起始字符- 引号外的子串以
=、;或,作为分隔边界
原始代码
CACCALLPLC: CALLPLCNAME="${EPolicyCacName}", MCB=$BANDWIDTH; CACPLCSET: CACPLCSETNAME="${BandPolicyName}",ACPLCSETMODE=SHARE,ALLPLCNAME="${EPolicyCacName}"; SIPAN: ANNAME="E_$BackupCorporateName", LETYPE=P-CSCF, ADDRNAME="$ADDRNAME";
预期结果
CACCALLPLC: CALLPLCNAME="TEST", MCB=TEST; CACPLCSET: CACPLCSETNAME="TEST",ACPLCSETMODE=SHARE,ALLPLCNAME="TEST"; SIPAN: ANNAME="TEST", LETYPE=P-CSCF, ADDRNAME="TEST";
最简正则表达式及替换方案
正则表达式
(?<==|")\S*?\$\S*?(?="|;|,|$)
替换规则
将所有匹配到的内容替换为TEST,需开启全局匹配模式(即g flag)
正则逻辑解释
(?<==|"):正向预查,锁定子串的起始边界(前导为=或")\S*?\$\S*?:匹配包含$的非空白字符序列,*?采用非贪婪匹配,避免跨边界抓取内容(?="|;|,|$):正向预查,锁定子串的结束边界(后续为"、;、,或行尾)
验证效果
用上述正则对原始代码执行全局替换后,输出结果完全符合预期。
内容的提问来源于stack exchange,提问作者ADaren
相关产品推荐
相关产品推荐

