#regex #ant
#регулярное выражение #ant
Вопрос:
В файле у меня есть следующее
version: [0,1,0]
и я хотел бы установить свойство Ant в строковое значение 0.1.0
.
Регулярное выражение
version:[[:space:]][([[:digit:]]),([[:digit:]]),([[:digit:]])]
и мне нужно затем установить свойство в
1.2.3
чтобы получить
0.1.0
Я не могу понять, как использовать задачи Ant вместе, чтобы сделать это.
У меня есть Ant-contrib, поэтому я могу использовать эти задачи.
Ответ №1:
Основываясь на втором решении Мэтта, это сработало для меня для любого (текстового) файла, одной строки или нет. У него нет зависимостей от apache-contrib.
<loadfile property="version" srcfile="version.txt">
<filterchain>
<linecontainsregexp>
<regexp pattern="version:[ t][([0-9]),([0-9]),([0-9])]"/>
</linecontainsregexp>
<replaceregex pattern="version:[ t][([0-9]),([0-9]),([0-9])]" replace="1.2.3" />
</filterchain>
</loadfile>
Ответ №2:
Решил это с помощью этого:
<loadfile property="burning-boots-js-lib-build.lib-version" srcfile="burning-boots.js"/>
<propertyregex property="burning-boots-js-lib-build.lib-version"
override="true"
input="${burning-boots-js-lib-build.lib-version}"
regexp="version:[ t][([0-9]),([0-9]),([0-9])]"
select="1.2.3" />
Но это кажется немного расточительным — он загружает весь файл в свойство!
Если у кого-нибудь есть предложения получше, пожалуйста, напишите 🙂
Комментарии:
1. Спасибо, FailedDev — теперь я почти освоился с Ant!
Ответ №3:
Вот способ, который не использует ant-contrib , используя loadproperties
и filterchain
(обратите внимание, что replaceregex
это «строковый фильтр» — см. tokenfilter
Документы — а не replaceregexp
задача):
<loadproperties srcFile="version.txt">
<filterchain>
<replaceregex pattern="[([0-9]),([0-9]),([0-9])]" replace="1.2.3" />
</filterchain>
</loadproperties>
Обратите внимание, что регулярное выражение немного отличается, мы обрабатываем файл как файл свойств.
В качестве альтернативы вы могли бы использовать loadfile
с a filterchain
, например, если файл, который вы хотели загрузить, не был в формате properties .
Например, если содержимое файла было просто [0,1,0]
, и вы хотели установить version
свойство 0.1.0
равным, вы могли бы сделать что-то вроде:
<loadfile srcFile="version.txt" property="version">
<filterchain>
<replaceregex pattern="s [([0-9]),([0-9]),([0-9])]" replace="1.2.3" />
</filterchain>
</loadfile>