Возможно ли получить подстроку из пользовательского свойства в ant?

#regex #ant

#регулярное выражение #ant

Вопрос:

У меня есть определенные свойства, определенные в файле myprop.properties в следующем формате:

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

В моей цели ant я могу использовать эту строку как свойство, используя ${my.first.prop} expression . Теперь я хочу получить подстроку перед словом expanded , которое D:/MyFolder/abc/

Как мне сделать то же самое в цели ant?

Решение: Хорошо, после некоторых испытаний следующее регулярное выражение дало мне требуемый результат-

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

Тем не менее, я хочу понять написанное мной регулярное выражение, что (.*) означает и почему оно как до, так и после expanded . Также что $ означает?

Ответ №1:

Согласно задаче Ant Contrib PropertyRegex :

Выполняет операции регулярного выражения над входной строкой и присваивает результатам свойство. Можно выполнить две разные операции:

  • Замена — сопоставленное регулярное выражение заменяется шаблоном подстановки
  • Выбор — группировки внутри регулярного выражения выбираются с помощью выражения выбора.

Выражения выбираются в том же синтаксисе, что и шаблон подстановки регулярных выражений.

  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 значением свойства.

И значение $ в регулярном выражении — это конец строки