Установить свойство Ant на основе регулярного выражения в файле

#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>