是否可以从ant中的用户定义属性获取子字符串?

时间:2016-10-06 13:03:39

标签: regex ant

我在myprop.properties文件中定义了以下格式的某些属性:

my.first.prop = D:/MyFolder/abc/expanded/myfile.txt

在我的ant目标中,我可以使用${my.first.prop}表达式将该字符串用作属性。现在我想获得单词expanded之前的子串D:/MyFolder/abc/

我如何在蚂蚁目标中做同样的事情?

解决方案:好的,经过一些试验,以下正则表达式给了我所需的输出 -

<target name="myTarget">
     <propertyregex
                property="first.part"
                input="${my.first.prop}"
                regexp="(.*)expanded(.*)$"
                select="\1"/>
    <echo>${first.part}</echo>
</target>

但是,我想了解我写的正则表达式(.*)表示什么,以及为什么它在expanded之前和之后。 $表示什么呢?

1 个答案:

答案 0 :(得分:1)

根据Ant Contrib PropertyRegex Task

  

对输入字符串执行正则表达式操作,并将结果设置为属性。可以执行两种不同的操作:

     
      
  • 替换 - 匹配的正则表达式替换为替代模式
  •   
  • 选择 - 通过选择表达式选择正则表达式中的分组。
  •   
     

使用与正则表达式替换模式相同的语法选择表达式。

\0 indicates the entire property name (default).
\1 indicates the first grouping
\2 indicates the second grouping
etc... 

(.*)expanded(.*)$ - 在expanded之前说出任何内容,然后是任何内容 因此匹配如粗体所示:
d:/ MyFolder文件/ ABC / expanded /myfile.txt

您想要正则表达式匹配组的第一部分。 (.*)expanded(.*)$ - 正则表达式将D:/MyFolder/abc/视为select="\1"任务的propertyregex属性。

select = "\2"会获取值/myfile.txt,这是与给定正则表达式相对于my.first.prop属性值的最后一个匹配项。

正则表达式中$的重要性是字符串

的结尾