2014-08-28 3 views
1

Мне нужно разбить строки из заданного URL и сохранить их в свойстве.ant task для разделения данных строк

Например: Адрес: имя_проекта/ОК/ProjectID/версия свойства должны быть магазин: Name = имя_проекта Mode = QA Id = ProjectID Version = версия

+0

сплит-работа с регулярным выражением, см. Мое редактирование .. также Ant Flaka split принимает регулярное выражение. – Rebse

ответ

7

Использование встроенных JavaScript двигателя (JDK> = 1.6.06) и ant script task:

<project> 

<property name="url" value="projectname/qa/projectid/version"/> 

<script language="javascript"> 
    arr = project.getProperty('url').split('/'); 
    project.setProperty('Name', arr[0]); 
    project.setProperty('Mode', arr[1]); 
    project.setProperty('Id', arr[2]); 
    project.setProperty('Version', arr[3]); 
</script> 

<echo> 
    $${Name} => ${Name} 
    $${Mode} => ${Mode} 
    $${Id}  => ${Id} 
    $${Version} => ${Version} 
</echo> 

</project> 

выход:

[echo] ${Name} => projectname 
[echo] ${Mode} => qa 
[echo] ${Id}  => projectid 
[echo] ${Version} => version 

Оберните его в macrodef или scriptdef для повторного использования (что эквивалентно написанию новой задачи муравья).

Если вы предпочитаете использовать ant anton вместо задания ant script, см. Ant Flaka, который имеет несколько возможностей для манипулирования строкой, см. manual и examples.

- EDIT -
Сплит-работа с регулярным выражением, f.e. :

<project> 
<property name="url" value="Chico.Harpo.Groucho.Gummo.Zeppo"/> 

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

    // won't work because special meaning of '.' as wildcard 
    // arr = project.getProperty('url').split('.'); 
    // so either use 
    // masking as character class '[.]' or '\\.' 
    arr = project.getProperty('url').split('[.]'); 
    for (i=0; i < arr.length; i++) 
    { 
    print(arr[i]); 
    } 
]]> 
</script> 

</project> 
+0

Спасибо, Rebse, я попробовал, его работа с помощью java-скрипта. Есть ли вероятность, что сделать это с помощью регулярного выражения? – jass

+0

Мой бог. Смешивание Ant и Javascript. Какая удивительная комбинация деталей. Доктор Франкенштейн был бы горд. (Но, спасибо!) –

3

Просто, чтобы показать альтернативу script подхода Rebse, вот это более многословен путь с регулярным выражением. Вы могли бы извлечь каждое свойство с блоком, как это:

<property name="url" value="projectname/qa/projectid/version"/> 

<loadresource property="Name"> 
    <string value="${url}"/> 
    <filterchain> 
    <tokenfilter> 
     <replaceregex pattern="(\w+)/(\w+)/(\w+)/(\w+)" replace="\1"/> 
    </tokenfilter> 
    </filterchain> 
</loadresource> 
<echo message="Name: ${Name}"/> 

Чтобы ответить на ваш вопрос от комментариев, вот пример того, как можно использовать этот подход для извлечения части вам требуется. Я не сказал, что это было довольно ...

<target name="test"> 
    <property name="url" value="http://svn.abc.com/builds/abcd/qa/FACC790C-1480-49F7-80F6-B91B07E52DA9/v1.0.1/r5532/"/> 

    <echo message="url: ${url}"/> 

    <loadresource property="a"> 
     <string value="${url}"/> 
     <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\1"/> 
     </tokenfilter> 
     </filterchain> 
    </loadresource> 
    <echo message="a: ${a}"/> 

    <loadresource property="b"> 
     <string value="${url}"/> 
     <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\2"/> 
     </tokenfilter> 
     </filterchain> 
    </loadresource> 
    <echo message="b: ${b}"/> 

    <loadresource property="c"> 
     <string value="${url}"/> 
     <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\3"/> 
     </tokenfilter> 
     </filterchain> 
    </loadresource> 
    <echo message="c: ${c}"/> 

    <loadresource property="d"> 
     <string value="${url}"/> 
     <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\4"/> 
     </tokenfilter> 
     </filterchain> 
    </loadresource> 
    <echo message="d: ${d}"/> 

    <loadresource property="e"> 
     <string value="${url}"/> 
     <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\5"/> 
     </tokenfilter> 
     </filterchain> 
    </loadresource> 
    <echo message="e: ${e}"/> 

    <loadresource property="f"> 
     <string value="${url}"/> 
     <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="http://([^/]+)/([^/]+)/([^/]+)/(?:[^/]+)/([^/]+)/v([^/]+)/r([^/]+)/" replace="\6"/> 
     </tokenfilter> 
     </filterchain> 
    </loadresource> 
    <echo message="f: ${f}"/> 
</target> 

Выход:

test: 
    [echo] url: http://svn.abc.com/builds/abcd/qa/FACC790C-1480-49F7-80F6-B91B07E52DA9/v1.0.1/r5532/ 
    [echo] a: svn.abc.com 
    [echo] b: builds 
    [echo] c: abcd 
    [echo] d: FACC790C-1480-49F7-80F6-B91B07E52DA9 
    [echo] e: 1.0.1 
    [echo] f: 5532 

Таким образом, в целом, повторное использование той же схеме, каждый раз, но выбирая другую группу (1-4). В шаблоне используется 6 захватывающих и 1 не захватывающая группа (для/qa/part). Много других способов, которыми вы могли бы это сделать.

+0

Задача скрипта также является основным Ant. При использовании встроенного javascript-движка не нужны аддон-банки. – Rebse

+0

Да, понял спасибо :) – sudocode

+0

Вышеупомянутый код работает нормально, но в моем случае я хотел бы знать регулярное выражение, эквивалентное приведенному ниже адресу: http://svn.abc.com/builds/abcd/qa /FACC790C-1480-49F7-80F6-B91B07E52DA9/v1.0.1/r5532/ мне нужно получить значение, как, а = HTTP: //svn.abc.com Ь = строит с = ABCD г = FACC790C -1480-49F7-80F6-B91B07E52DA9 e = 1.0.1 f = 5532 Любая небольшая помощь будет отличной. – jass

Смежные вопросы