我遇到了我未能理解正则表达式替换模式和Apache Ant在 propertyregex 上的有限文档的问题。我的问题是我需要使用$ {user.name}属性并创建一个名为$ {user.name.lc}的小写版本,但我无法使替换字符串正确。
这就是我所拥有的:
<target name="foobar">
<echo>${user.name}</echo>
<propertyregex
property="user.name.lc"
input="${user.name}"
regexp="[A-Z]"
replace="[a-z]"
global="true" />
<echo>${user.name.lc}</echo>
</target>
它正确地找到了名称的大写部分,但更换了炸弹。这就是我得到的:
foobar:
[echo] Sally Fields
[echo] [a-z]ally [a-z]ields
我一直在谷歌搜索并阅读大约两个小时尝试不同的替换字符串。蚂蚁文档涉及分组并显示这些示例。对我没有帮助,因为用户名中可能有 分组。
任何人都可以向我提供Ant说我需要“正则表达式替代模式吗?” 我
答案 0 :(得分:0)
不要使用正则表达式。只有少数正则表达式引擎支持您正在寻找的内容,我认为propertyregex不是其中之一。请改用:
<pathconvert property="converted">
<path path="${user.name}"/>
<chainedmapper>
<flattenmapper/>
<scriptmapper language="javascript">
self.addMappedName(source.toLowerCase());
</scriptmapper>
</chainedmapper>
</pathconvert>
<echo>${converted}</echo>
答案 1 :(得分:-2)
您可以在替换属性中使用%1>
。 >
是转换为大写的标准正则表达式符号,因此您的代码将如下所示:
<propertyregex
property="user.name.lc"
input="${user.name}"
regexp="[A-Z]"
replace="%1>"
global="true" />