replaceregexp修剪在Netbeans中无法正常工作

时间:2010-01-07 18:09:15

标签: regex ant

我正在尝试使用replaceregexp修剪某些值。当我在EditPad Pro等软件中尝试时,一切看起来都很棒。

以下是我想要完成的示例:

mf.version.impl = 2.01.00  
mf.version.spec= 2.01.00  

注意最后一位数后面的额外空格。

然后我正在使用这种模式:

[0-9]+.[0-9]+.[0-9]+[ ]*

但它在Netbeans中不起作用。

这是我的蚂蚁命令:

<!--If postfix is empty, remove the empty space-->
    <replaceregexp file="../Xinco/nbproject/project.properties"
                   match="mf.version.spec?=?[0-9]+.[0-9]+.[0-9]+[ ]*"
                   replace="mf.version.spec = ${version_high}.${version_mid}.${version_low}"
                   byline="false"/>
    <replaceregexp file="../Xinco/nbproject/project.properties"
                   match="mf.version.impl?=?[0-9]+.[0-9]+.[0-9]+[ ]*"
                   replace="mf.version.impl = ${version_high}.${version_mid}.${version_low}"
                   byline="true"/>

$ {version_high}。$ {version_mid}。$ {version_low}是已定义的变量,分别对应2.01.00。

导致

mf.version.impl = 2.01.00 
mf.version.spec = 2.01.00 

注意最后一位数后的一个额外空格。

我调试了ant调用,看起来上面的命令没有执行,就像匹配没有发生一样。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你应该逃避你的。并使用捕获组

e.g。 (例如Perl正则表达式)

s/([0-9]+\.[0-9]+\.[0-9]+)[ ]*/$1/

答案 1 :(得分:1)

由于您不关心该值,因此您无需明确匹配该值。尝试:

^mf\.version\.impl\s*=.*$

含义:

  • ^ - 开始行(在多线模式下)
  • mf\.version\.impl - 字面意思是字符串“mf.version.impl”,点已转义。
  • \s* - 零个或多个空格
  • .* - 其他任何内容(我们可以忽略该版本,因为您使用常量更改它),一直到...
  • $ - 行尾

奖金追踪:

查看specs,看起来你可以用一个正则表达式捕获两行(不确定它是否有效):

^(mf\.version\.(impl|spec))\s*=.*$

和替换规则:

replace="\1 = ${version_high}.${version_mid}.${version_low}"

这会将\1替换为之前捕获的值,因此,您只需要一条规则。 (对于琐事,通常$1用于替换,但不是在这里)