Требуется замена синтаксиса для задачи Ant propertyregex

#regex #ant #properties #substitution

#регулярное выражение #ant #свойства #замена

Вопрос:

Я сталкиваюсь с моей неспособностью понять шаблоны замены регулярных выражений и ограниченную документацию 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 ссылается на группировки и показывает примеры с ними. Мне не нужна помощь, потому что в имени пользователя могут быть или не быть группировки.

Кто-нибудь может предоставить мне то, что Ant говорит, что мне нужен «шаблон подстановки регулярных выражений»? мой

Ответ №1:

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

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

  <echo>${converted}</echo>
 

Ответ №2:

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

 <propertyregex 
                property="user.name.lc" 
                input="${user.name}" 
                regexp="[A-Z]" 
                replace="%1>" 
                global="true" />