Как получить индекс по регулярному выражению в ANT - PullRequest
0 голосов
/ 19 марта 2019

У меня есть строка с версией .v_september (каждый месяц она будет меняться).В этом я хотел взять значение после подчеркивания, что означает "sep" (только первые 3 буквы).

Используя регулярное выражение .v _ (. *) Я могу взять полный месяц и не могу получить первые 3 буквы в одиночку.

Может кто-нибудь помочь мне, как я могу добиться этого в Apache ANT.Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Функции регулярных выражений в свойствах немного неудобны в нативном Ant (в отличие от работы с текстом в файлах).У Ant-contrib есть задача replaceregexp, но я стараюсь по возможности избегать ant-contrib.

Вместо этого ее можно выполнить с помощью задачи loadfile и вложенного фильтра:

    <property name="version" value=".v_september" />

    <loadfile property="version.month.short">
        <propertyresource name="version" />
        <filterchain>
            <tokenfilter>
                <replaceregex pattern="\.v_(.{3}).*" replace="\1" />
            </tokenfilter>
        </filterchain>
    </loadfile>

    <echo message="${version.month.short}" />

Что касается шаблона регулярного выражения, обратите внимание, как он должен заканчиваться на .*.Это связано с тем, что в Ant нет функции match, которая просто возвращает содержимое группы захвата.Он просто выполняет замену, поэтому нам нужно заменить все в строке, которая не является частью группы.

1 голос
/ 19 марта 2019

.* будет захватывать все, и для ограничения захвата только трех символов вам нужно написать {3} вместо *. Также вы должны экранировать . в начале вашего регулярного выражения, чтобы соответствовать только буквальной точке. Вы можете использовать это регулярное выражение и захватить от group1,

\.v_(.{3})

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...