![正则表达式将字符串附加到匹配的一部分](https://linux22.com/image/1433414/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%B0%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%99%84%E5%8A%A0%E5%88%B0%E5%8C%B9%E9%85%8D%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86.png)
我发现这很难做到,事情如下:
我有一个以下形式的字符串:
GlobalParameters::$docId = DocList::$PARTNERS;
我想附加字符串_看法到符号的末尾。问题是我不仅想匹配伙伴但其他符号也一样,所以我尝试了这个正则表达式:
寻找:
GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)\;
用。。。来代替:
GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)_VIEW\;
但我刚刚得到:
GlobalParameters::$docId = DocList::$(.*)_VIEW;
在所有比赛中。我该如何解决这个问题?
答案1
主要的错误在于,匹配的字段由 和 分隔(
,)
需要\1
在替换字符串中用 来标识:
GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\1_VIEW\;
还值得注意的是,虽然您的 Geany 实现没有这个默认值,但许多使用正则表达式的程序默认为 BRE(基本正则表达式)模式,该模式需要\(
和\)
来分隔搜索子表达式,如下所示:
GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\(.*\)\;
注意:从 v1.24 开始的 Geany 不需要转义括号,因此只需要(
和)
来分隔匹配的字段。
我想到了一些其他更简单的搜索和替换字符串,但由于看不到文件中其他字符串的上下文,我不确定哪个字符串可能令人满意。不过,以下方法应该没问题:-
搜索:
\(GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$.*\)\;
代替:
\1_VIEW\;
这里除尾随部分之外的整个字符串;
都被匹配并_VIEW
附加。
答案2
为了扩展 AFH 的答案,我举了一个更复杂的例子:
待修改字符串:
abc: 123
搜索:
(abc)\: (123)
替换(1def 将附加到第一个匹配表达式,456 将附加到第二个匹配表达式):
\1def \2456
结果:
abcdef 123456