FileDocCategorySizeDatePackage
Jdk14RegexpRegexp.javaAPI DocApache Ant 1.703594Wed Dec 13 06:16:22 GMT 2006org.apache.tools.ant.util.regexp

Jdk14RegexpRegexp

public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp
Regular expression implementation using the JDK 1.4 regular expression package

Fields Summary
Constructors Summary
public Jdk14RegexpRegexp()
Constructor for Jdk14RegexpRegexp

        super();
    
Methods Summary
protected intgetSubsOptions(int options)
Convert ant regexp substitution option to jdk1.4 options.

param
options the ant regexp options
return
the jdk14 substition options

        int subsOptions = REPLACE_FIRST;
        if (RegexpUtil.hasFlag(options, REPLACE_ALL)) {
            subsOptions = REPLACE_ALL;
        }
        return subsOptions;
    
public java.lang.Stringsubstitute(java.lang.String input, java.lang.String argument, int options)
Perform a substitution on the regular expression.

param
input The string to substitute on
param
argument The string which defines the substitution
param
options The list of options for the match and replace.
return
the result of the operation
throws
BuildException on error

        // translate \1 to $(1) so that the Matcher will work
        StringBuffer subst = new StringBuffer();
        for (int i = 0; i < argument.length(); i++) {
            char c = argument.charAt(i);
            if (c == '$") {
                subst.append('\\");
                subst.append('$");
            } else if (c == '\\") {
                if (++i < argument.length()) {
                    c = argument.charAt(i);
                    int value = Character.digit(c, 10);
                    if (value > -1) {
                        subst.append("$").append(value);
                    } else {
                        subst.append(c);
                    }
                } else {
                    // XXX - should throw an exception instead?
                    subst.append('\\");
                }
            } else {
                subst.append(c);
            }
        }
        argument = subst.toString();

        int sOptions = getSubsOptions(options);
        Pattern p = getCompiledPattern(options);
        StringBuffer sb = new StringBuffer();

        Matcher m = p.matcher(input);
        if (RegexpUtil.hasFlag(sOptions, REPLACE_ALL)) {
            sb.append(m.replaceAll(argument));
        } else {
            boolean res = m.find();
            if (res) {
                m.appendReplacement(sb, argument);
                m.appendTail(sb);
            } else {
                sb.append(input);
            }
        }

        return sb.toString();