#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
значением свойства.
И значение $
в регулярном выражении — это конец строки