需要替换Ant的propertyregex任务的语法

时间:2011-10-31 04:10:12

标签: regex ant properties substitution

我遇到了我未能理解正则表达式替换模式和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说我需要“正则表达式替代模式吗?” 我

2 个答案:

答案 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" />