Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Eclipse条件替换为正则表达式_Regex_Eclipse_Replace - Fatal编程技术网

Regex Eclipse条件替换为正则表达式

Regex Eclipse条件替换为正则表达式,regex,eclipse,replace,Regex,Eclipse,Replace,给定文本 public void MyFunction(int i, String str, boolean doIt) { Log.i(TAG, "Enter MyFunction(int i, String str, boolean doIt)"); 我想更换第二行,但不是第一行 public void MyFunction(int i, String str, boolean doIt) { Log.i(TAG, "Enter MyFunction( i:" + i +

给定文本

public void MyFunction(int i, String str, boolean doIt) {
    Log.i(TAG, "Enter MyFunction(int i, String str, boolean doIt)");
我想更换第二行,但不是第一行

public void MyFunction(int i, String str, boolean doIt) {
    Log.i(TAG, "Enter MyFunction( i:" + i + ", str:" + str ", doIt:" + doIt + ")");
到目前为止,我使用以下正则表达式成功地获得了这些结果:

查找“
\w+\s+(\w+)([,\)])

替换为“
$1:+$1+”$2

有没有办法强制只在Log.i行上执行替换

编辑:
我尝试了下面的正则表达式 “
Log\.i\(.*?\(\s*(\w++\s+(\w+)([,\)])+

但是$1、$2、$3只包含最后一个匹配项(最后一个参数:doIt)

$1=布尔doIt)
$2=doIt
$3=)

当应该有3组$1、$2、$3时,每个参数一个。 如果您知道如何检索多个匹配项,这也将成为解决方案

我使用这个小perl来完成这项工作:

next unless /Log\.i/;
s/TAG,/TAGG/;
s/(final\s+)?[^ \(]+\s+(\w+)([,\)])/$2:\" \+ $2 \+ \"$3/g;
s/TAGG/TAG,/;
使用命令行:

perl -pi <scriptname> <file>
perl-pi
如果有人还想贡献一些,我知道我可以运行perl作为Eclipse外部工具来处理java文件。我该怎么做

更新:

我写了一篇关于如何使用外部perl从EclipseIDE中运行脚本的文章

只匹配以
Log.i
开头的行。我想你是说Java,Eclipse IDE与你的问题没有多大关系。@MattBall你可以注意到我展示的正则表达式有3个匹配项,而不是一个匹配项。如果我将Log.I作为正则表达式的一部分,则只有第一个或最后一个参数匹配:如果你有一个解决方案,请发布它,我会尝试它。@ Junuxx实际上是指Eclipse编辑器,它的搜索端替换功能是任何文本文件::是的,在我的例子中是java代码,但与问题无关,它可以是C++,C++等。我以为你的程序处理的字符串看起来像代码。
perl -pi <scriptname> <file>