正则表达式将字符串附加到匹配的一部分

正则表达式将字符串附加到匹配的一部分

我发现这很难做到,事情如下:

我有一个以下形式的字符串:

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

相关内容