简体   繁体   中英

How to get the index by regular expression in ANT

I have a string with a version as .v_september (every month it will vary). In this i wanted to take the value after underscore, which means "sep" (First 3 letters alone).

By using the regex .v_(.*) i am able to take the complete month and not able to get the first 3 letters alone.

Can someone help me out how can I achieve this in Apache ANT. Thanks !

Regex functions on properties are a bit awkward in native Ant (as opposed to working with text within files). Ant-contrib has the replaceregexp task, but I try to avoid ant-contrib whenever possible.

Instead, it can be accomplished with the loadfile task and a nested filter:

    <property name="version" value=".v_september" />

    <loadfile property="version.month.short">
        <propertyresource name="version" />
        <filterchain>
            <tokenfilter>
                <replaceregex pattern="\.v_(.{3}).*" replace="\1" />
            </tokenfilter>
        </filterchain>
    </loadfile>

    <echo message="${version.month.short}" />

Regarding the regex pattern, note how it needs to end with .* . This is because Ant doesn't have a "match" function that simply returns the content of a capture group. It's just running a replacement, so we need to replace everything in the string that isn't part of the group.

.* will capture everything and for limiting to capturing only three characters you need to write {3} instead of * . Also you should escape the . in the beginning of your regex to only match a literal dot. You can use this regex and capture from group1,

\.v_(.{3})

Demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM