Работа с системой регулярных выражений Ant, кажется, не дает мне никаких проблем. Имея достаточно работы, я обычно могу заставить ее работать (и понять, что я делал неправильно раньше). Но не в этот раз. У меня есть простая цель, в которой я хочу извлечь первый элемент из свойства, которое содержит одно или несколько слов, разделенных запятыми, например:
tgt.list.full=word1,word2,word3,word4
(Правка: tgt.list.full фактически заполняется другим свойством: tgt.list.basic, поэтому фактический файл cfg.list.file выглядит так:
tgt.list.basic=word1,word2,word3,word4
tgt.list.full=${tgt.list.basic}
)
Я хочу, чтобы первое слово: "word1" заменило свойство $ {target}. Вот как выглядит моя задача:
<target name="load-configuration-list">
<loadproperties srcfile="${cfg.list.file}">
<filterchain>
<containsregex pattern="^tgt.list.full=(.*),?.*" replace="target=\1" />
<concatfilter prepend="${cfg.list.file}" />
</filterchain>
</loadproperties>
<echo message="TGT: ${target}, FULL: ${tgt.list.full}"/>
<fail unless="target" message="A target cannot be determined"/>
</target>
В текущей версии, которую я перечислил под задачей «containsregex», $ {target} заполняется полным списком («word1, word2, word3, word4»), а не просто «word1». Я испробовал большое количество вариантов их. Вот пример:
<containsregex pattern="^tgt.list.full=(word1),?.*" replace="target=\1" />
Я ожидаю, что это, по крайней мере, FORCE заполняет целевое свойство, но в этом случае $ {target} остается неопределенным (даже полный список не вставляется в него).
Возможно, в моей логике цепочки фильтров есть изъян. Я знаю, что мог бы написать свою задачу, но в Ant , кажется, уже есть нужные мне компоненты, если я смогу лучше понять их.
Чтобы перефразировать мой первоначальный вопрос: учитывая разделенный запятыми список в свойстве Ant, как я могу использовать задачу Ant (не обязательно даже с использованиемrerexx или replaceregex) для извлечения первого элемента?