Нужно заменить синтаксис для Ant's propertyregex Task - PullRequest
2 голосов
/ 31 октября 2011

Я сталкиваюсь с моей неспособностью понять шаблоны подстановки регулярных выражений и ограниченную документацию Apache Ant по propertyregex . Моя проблема в том, что мне нужно взять свойство $ {user.name} и сделать строчную версию с именем $ {user.name.lc}, но я не могу получить правильную строку замены.

Вот что у меня есть:

  <target name="foobar">
    <echo>${user.name}</echo>
    <propertyregex 
                property="user.name.lc" 
                input="${user.name}" 
                regexp="[A-Z]" 
                replace="[a-z]" 
                global="true" />
    <echo>${user.name.lc}</echo>
  </target>

Правильно находит заглавные части имени, но заменяющие бомбы. Вот что я получаю:

foobar:
   [echo] Sally Fields
   [echo] [a-z]ally [a-z]ields

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

Кто-нибудь может дать мне то, что Ant говорит, что мне нужен "шаблон замены регулярных выражений?" мой

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

вы можете использовать %1> в атрибуте замены.> - это стандартный символ регулярного выражения для преобразования в верхний регистр, поэтому ваш код будет выглядеть следующим образом:

<propertyregex 
                property="user.name.lc" 
                input="${user.name}" 
                regexp="[A-Z]" 
                replace="%1>" 
                global="true" />
0 голосов
/ 31 октября 2011

Не используйте регулярные выражения для этого. Есть только несколько движков регулярных выражений, которые поддерживают то, что вы ищете, и я не думаю, что PropertyRegex является одним из них. Используйте это вместо:

  <pathconvert property="converted">
   <path path="${user.name}"/>
   <chainedmapper>
    <flattenmapper/>
    <scriptmapper language="javascript">
     self.addMappedName(source.toLowerCase()); 
    </scriptmapper>
    </chainedmapper>
  </pathconvert>

  <echo>${converted}</echo>
...