убегая от доллара посреди муравейника - PullRequest
3 голосов
/ 13 апреля 2010

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

Пример:

<property name="a" value="abc$" />
<property name="b" value="xyz" />
<path id="paths">
  <pathelement location="abc$/def" />
  <pathelement location="abc$/ghi" />
</path>
<pathconvert property="list" refid="paths" pathsep="${line.separator}" dirsep="/" />
<propertyregex property="list" input="${list}" override="true" regexp="${a}(.*)" replace="${b}\1" />
<echo message="${list}" />

Я бы хотел получить пару xyz/def и xyz/ghi. Это возможно? Я использую Ant 1.8.

Ответы [ 2 ]

1 голос
/ 13 апреля 2010

ой как-то я не прочитал ваш комментарий во всех деталях, но тем не менее, вот рабочий игрушечный раствор; -)

<project name="project" default="main">

    <taskdef resource="net/sf/antcontrib/antlib.xml"/>

 <property name="a" value="abc$" />
 <property name="b" value="xyz" />
 <path id="paths">
  <pathelement location="abc$/def" />
  <pathelement location="abc$/ghi" />
 </path>

 <target name="main">

  <pathconvert property="list" refid="paths" pathsep="${line.separator}" dirsep="/" />
  <propertyregex property="a" input="${a}" override="true" regexp="\$" replace="" />
  <propertyregex property="list" input="${list}" override="true" regexp="\$" replace="" />
  <propertyregex property="list" input="${list}" override="true" regexp="${a}" replace="${b}" />
  <echo>${list}</echo>
 </target>

</project>

результат:

main:
     [echo] /foobar/AntScripts/xyz/def
     [echo] /foobar/AntScripts/xyz/ghi
BUILD SUCCESSFUL

IMO, использование свойств с символом $ вызывает проблемы, разве нет другого пути?!

0 голосов
/ 12 декабря 2011

Ниже работает код:

<property name="a" value="abc$" /> 
<property name="b" value="xyz" /> 
<path id="paths"> 
  <pathelement location="abc$/def" /> 
  <pathelement location="abc$/ghi" /> 
</path> 
<pathconvert property="list" refid="paths" pathsep="${line.separator}" dirsep="/" /> 
<propertyregex property="a.escaped" input="${a}" regexp="\$$" replace="\\\\$$" global="true" />
<propertyregex property="list" input="${list}" override="true" regexp="${a.escaped}(.*)" replace="${b}\1" /> 
<echo message="${list}" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...