我正在尝试使用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调用,看起来上面的命令没有执行,就像匹配没有发生一样。
有什么想法吗?
答案 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
用于替换,但不是在这里)