I tried this Scot, but it didn't do it. So here's an easy repro:
<project default="main">
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<property name="myProp" value="C:\myDog\Loves\Big\Juicy\Bones"/>
<target name="main">
<propertyregex property="tmpProp" input="${myProp}" override="true"
regexp="\\" replace="\\\\" global="true"/>
<echo message="tmpProp is: ${tmpProp}"/>
</target>
</project>
It produces:
[echo] tmpProp is: C:\myDog\Loves\Big\Juicy\Bones
If I change it to:
<project default="main">
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<property name="myProp" value="C:\myDog\Loves\Big\Juicy\Bones"/>
<target name="main">
<propertyregex property="tmpProp" input="${myProp}" override="true"
regexp="\" replace="\\" global="true"/>
<echo message="tmpProp is: ${tmpProp}"/>
</target>
</project>
it crashes with:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1650)
at java.util.regex.Pattern.compile(Pattern.java:1403)
at java.util.regex.Pattern.<init>(Pattern.java:1124)
at java.util.regex.Pattern.compile(Pattern.java:840)
at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.getCompiledPatter
n(Jdk14RegexpMatcher.java:67)
at org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher.matches(Jdk14Rege
xpMatcher.java:94)
at net.sf.antcontrib.property.RegexTask.doReplace(RegexTask.java:135)
at net.sf.antcontrib.property.RegexTask.execute(RegexTask.java:192)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.Main.runBuild(Main.java:758)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
I don't know that what we're trying to do is possible with propertyregex. It
seems it may need some scripting. All I'm really trying to do is:
if(property1.indexOf(string1) >= 0) then return true;
I'll take a look at how to achieve this tomorrow. Thanks!
Eric
________________________________
From: Scot P. Floess <[email protected]>
To: Ant Users List <[email protected]>
Sent: Wed, January 20, 2010 2:21:41 PM
Subject: Re: AppendToProperty MacroDef
Mmm - you may need to do this before your first propertyregex
<propertyregex property="tmpProp" input="${propertyList}" override="true"
regexp="\\" replace="\\\\" globale="true"/>
Basically the above will escape the \
On Wed, 20 Jan 2010, Eric Fetzer wrote:
> Well, out of that error and on to the next. It seems that PropertyRegEx has
> an issue with the "\" as well. I wrote a different macrodef that works
> without slashes, but not with slashes. Anyone see a better way?
>
> <macrodef name="md.isInPropList" description="Find if a dir is a subdir of
> any dir in the list">
> <attribute name="var.item"/>
> <attribute name="var.itemList"/>
> <sequential>
> <!--First get rid of any values left from previous calls to this md and
> set to false-->
> <unset name="isInList"/>
> <property name="isInList" value="false"/>
> <!--For loop on each item in itemlist to see if any of them are true-->
> <for list="@{var.itemList}" param="item">
> <sequential>
> <!--Make sure regExResult isn't left over-->
> <unset name="regExResult"/>
> <!--Regex expression that will result in the value if it is in
> there-->
> <propertyregex property="regExResult"
> input="${propertyList}"
> override="true"
> regexp=".*(@{item})"
> select="\1"
> casesensitive="false"
> />
> <!--If regExResult is set to the value of the item, we have a
> match-->
> <if>
> <equals arg1="${regExResult}" arg2="${item}"/>
> <then>
> <unset name="isInList"/>
> <property name="isInList" value="true"/>
> </then>
> </if>
> </sequential>
> </for>
> </sequential>
> </macrodef>
>
>
> Thanks,
> Eric
>
>
>
>
> ________________________________
> From: Eric Fetzer <[email protected]>
> To: Ant Users List <[email protected]>
> Sent: Wed, January 20, 2010 1:40:34 PM
> Subject: Re: AppendToProperty MacroDef
>
> Beautiful, thanks Scott!
>
>
>
> On Jan 20, 2010, at 1:18 PM, "Scot P. Floess" <[email protected]> wrote:
>
>
> You could use Ant Contrib's var task - probably be a little easier :)
>
> <macrodef name="md.AppendProperty">
> <attribute name="var.propertyName"/>
> <attribute name="var.stringAppend"/>
> <sequential>
> <var name="@{var.propertyName}"
> value="$...@{var.propertyname}}@{var.stringAppend}"/>
> </sequential>
> </macrodef>
>
> On Wed, 20 Jan 2010, Eric Fetzer wrote:
>
> Hi all. I wrote a MacroDef to append a string to a property. All works as
> planned until you slip a "\" in there and then it gets jacked up. My
> javascripting has MUCH to be desired. Any help?
>
> <macrodef name="md.AppendProperty">
> <attribute name="var.propertyName"/>
> <attribute name="var.stringAppend"/>
> <sequential>
> <script language="javascript"> <![CDATA[
> curVal=project.getProperty("@{var.propertyName}");
>
> project.setProperty("@{var.propertyName}",curVal+"@{var.stringAppend}");
> ]]>
> </script>
> </sequential>
> </macrodef>
>
> Thanks,
> Eric
>
> Scot P. Floess
> 27 Lake Royale
> Louisburg, NC 27549
>
> 252-478-8087 (Home)
> 919-890-8117 (Work)
>
> Chief Architect JPlate http://sourceforge.net/projects/jplate
> Chief Architect JavaPIM http://sourceforge.net/projects/javapim
>
> Architect Keros http://sourceforge.net/projects/keros
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
Scot P. Floess
27 Lake Royale
Louisburg, NC 27549
252-478-8087 (Home)
919-890-8117 (Work)
Chief Architect JPlate http://sourceforge.net/projects/jplate
Chief Architect JavaPIM http://sourceforge.net/projects/javapim
Architect Keros http://sourceforge.net/projects/keros
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]