#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" />