манипулирование строкой муравья: извлечение символов из строки - PullRequest
7 голосов
/ 10 февраля 2011

У меня есть свойство ant со значением типа 1.0.0.123

Я хочу извлечь значение после последней точки, в данном случае это будет 123. Какую задачу муравья я должен использовать и как?

Ответы [ 6 ]

10 голосов
/ 10 февраля 2011

Я подозреваю, что самый простой подход - использовать задачу ant-contrib PropertyRegex .

Как-то так - полностью не проверено:

<propertyregex property="output"
          input="input"
          regexp=".*([^\.]*)"
          select="\1" />
9 голосов
/ 14 февраля 2013

С родной задачей муравья

Если я не хочу использовать ни внешние библиотеки, ни скрипты, я нашел в ответ на аналогичный вопрос лучший вариант (отметьте его за этот ответ).Здесь вы будете использовать ReplaceRegex :

<loadresource property="index">
  <propertyresource name="build.number"/>
  <filterchain>
    <tokenfilter>
      <filetokenizer/>
      <replaceregex pattern=".*\.)" replace="" />
    </tokenfilter>
  </filterchain>
</loadresource>

(я использовал те же имена переменных, что и вы, в вашем решении. Конечно, при этом по-прежнему не хватает приращениячасть вашего ответа, но это не было в вашем вопросе.)

Этот скрипт загружает в index результат удаления регулярного выражения .*\.) из build.number, то есть, если build.number = 1.0.0.123 затем index = 123.


Пример

build.xml:

<project name="ParseBuildNumber" default="parse" basedir=".">
    <property name="build.number" value="1.0.0.123"/>

    <target name="parse">
        <loadresource property="index">
            <propertyresource name="build.number"/>
            <filterchain>
                <tokenfilter>
                    <filetokenizer/>
                    <replaceregex pattern=".*\." replace="" />
                </tokenfilter>
            </filterchain>
        </loadresource> 
        <echo message="build.number=${build.number}; index=${index}"/>
    </target>

</project>
$ ant
Buildfile: /tmp/build.xml

parse:
     [echo] build.number=1.0.0.123; index=123

BUILD SUCCESSFUL
Total time: 0 seconds
8 голосов
/ 10 февраля 2011

Хорошо, я нашел ответ сам, и это проверено.Вы просто должны использовать немного JavaScript.

<target name="get build ctr">

    <script language="javascript">
        <![CDATA[

                // getting the value
                buildnumber = myproj.getProperty("build.number");
                index = buildnumber.lastIndexOf(".");
                counter = buildnumber.substring(index+1);
                myproj.setProperty("buildctr",counter);

            ]]>
    </script>

</target>
7 голосов
/ 26 октября 2011
<propertyregex property="xtractedvalue" 
               input="${foobar}" 
               regexp="(.*)\.(.*)$" 
               select="\2" />
1 голос
/ 27 мая 2014

Я бы также использовал задачу PropertyRegex для ant-contrib. Следующий фрагмент кода работает, только если входная строка соответствует соглашению, которое вы использовали в своем описании, и вы также можете использовать его для извлечения других чисел, изменив значение, введенное в теге select.

<propertyregex property="output"
          input="input"
          regexp="(\d)\.(\d)\.(\d)\.(\d{3})"
          select="\4" />

Вы также можете использовать задачу issest в выходной строке, чтобы распечатать сообщение об ошибке, если входная строка не соответствует соглашению, поскольку свойство вывода не будет установлено.

1 голос
/ 16 февраля 2011

Вот решение, использующее flaka без сценариев =

<project xmlns:fl="antlib:it.haefelinger.flaka">

 <property name="foobar" value="1.0.0.123"/>

  <target name="main">   
   <!-- simple echo -->
   <fl:echo>xtractedvalue => #{split('${foobar}','\.')[3]}</fl:echo>
   <!-- create property for further processing.. -->
   <fl:let>
    xtractedvalue := split('${foobar}','\.')[3]
   </fl:let>
   <echo>$${xtractedvalue} => ${xtractedvalue}</echo> 
  </target> 
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...