Ant Tokenizer: выбор отдельного токена - PullRequest
1 голос
/ 05 марта 2010

У меня есть следующее задание муравья:

<loadfile property="proj.version" srcfile="build.py">
    <filterchain>
        <striplinecomments>
            <comment value="#"/>
        </striplinecomments>
        <linecontains>
            <contains value="Version" />
        </linecontains>
    </filterchain>
</loadfile>
<echo message="${proj.version}" />

И вывод

 [echo] config ["Version"]          = "v1.0.10-r4.2"

Как мне затем использовать токенизатор, чтобы получить только v1.0.10-r4.2, эквивалент

| cut -d'"' -f4

1 Ответ

3 голосов
/ 05 марта 2010

Вы можете использовать элемент containsregex в вашем filterchain как tokenfilter.

Это должно отфильтровать любую строку с "Version" в ней и вернуть в качестве содержимого единственную захваченную группу: 'vx.y.zz....'

? \" Version \ " \ "(v [^ \"] +?) \". » replace = "\ 1" /> не работает.
Может быть <содержитregex шаблон = '^. </em>? "Версия". "(v [^ \"] +?)». replace = "\ 1" /> может работать (с одинарными кавычками для атрибута parameter, что позволяет использовать неэкранированные двойные кавычки внутри значения параметра)

На самом деле ОП Джон Оксли предоставляет рабочее решение с заменой двойных кавычек (\") на &quot;:

<containsregex
        pattern="^.*?&quot;Version&quot;.*&quot;(v[^&quot;]+?)&quot;.*"
        replace="\1" />
...