Hallo Daniel,
thanks again for your post!
> I said subclass, not modify :) You can subclass Perl5Substitution,
> override append, and wrap the MatchResult with your own
> MatchResultAdapter (maybe a dummy convenience adapter should be
> added to the API) before passing it to super.appendSubstitution().
> For example:
> [...]
> MyMatchResult would override the delegate's method return values,
> applying whatever modifications you wanted to the real result, which
> would be used transparently by Perl5Substitution.
Know I wrote a Perl5Subsitution-Extension as recommend by you. Also
I overwrote the "group(int group)"-Method of the passed MatchResult-
object:
<snip>
/* (non-Javadoc)
* @see org.apache.oro.text.regex.MatchResult#group(int)
*/
public synchronized String group(int group) {
return(this.orgMatchResult.group(group));
//return(this.orgMatchResult.group(group).toUpperCase());
//return(System.getProperty(this.orgMatchResult.group(group)));
//return("foobar");
}
</snip>
this.orgMatchResult is the MatchResult-object passed by
super.appendSubstitution(appendBuffer, new MyMatchResult(match),
substitutionCount, originalInput, matcher, pattern);
The hole thing realy works out - sometimes :-(
This is my Test-regexp:
String ein = "Version prop:java.version Home prop:java.home ";
String regExp = "s#prop:(.*?)\\s#-$1-#gi";
Case a):
return(this.orgMatchResult.group(group));
leads to:
Version -java.version- Home -java.home-
(As with normal "Perl5Util.substitute")
Case b):
return(this.orgMatchResult.group(group).toUpperCase());
leads to:
Version -JAVA.VERSION- Home -JAVA.HOME-
(Great! My Modifikation works!)
Case c):
return(System.getProperty(this.orgMatchResult.group(group)));
leads to:
java.lang.NullPointerException
at
org.apache.oro.text.regex.Perl5Substitution._calcSub(Perl5Substitution.java:341)
at
org.apache.oro.text.regex.Perl5Substitution.appendSubstitution(Perl5Substitution.java:535)
at
de.lotk.yaoro.text.regex.YaPerl5Substitution.appendSubstitution(YaPerl5Substitution.java:95)
at org.apache.oro.text.regex.Util.substitute(Util.java:457)
at org.apache.oro.text.regex.Util.substitute(Util.java:412)
at de.lotk.yaoro.text.perl.YaPerl5Util.substitute(YaPerl5Util.java:178)
at de.lotk.yaoro.text.perl.YaPerl5Util.substitute(YaPerl5Util.java:37)
at de.lotk.yaoro.YaOroTest.main(YaOroTest.java:38)
java.lang.RuntimeException
at de.lotk.yaoro.YaOroTest.main(YaOroTest.java:44)
Exception in thread "main"
(What the hell...?)
The funny case d):
return("foobar");
leads to:
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.lang.StringBuffer.append(Unknown Source)
at
org.apache.oro.text.regex.Perl5Substitution._calcSub(Perl5Substitution.java:408)
at
org.apache.oro.text.regex.Perl5Substitution.appendSubstitution(Perl5Substitution.java:535)
at
de.lotk.yaoro.text.regex.YaPerl5Substitution.appendSubstitution(YaPerl5Substitution.java:95)
at org.apache.oro.text.regex.Util.substitute(Util.java:457)
at org.apache.oro.text.regex.Util.substitute(Util.java:412)
at de.lotk.yaoro.text.perl.YaPerl5Util.substitute(YaPerl5Util.java:178)
at de.lotk.yaoro.text.perl.YaPerl5Util.substitute(YaPerl5Util.java:37)
at de.lotk.yaoro.YaOroTest.main(YaOroTest.java:38)
java.lang.RuntimeException
at de.lotk.yaoro.YaOroTest.main(YaOroTest.java:44)
Exception in thread "main"
(?????)
The pattern-engine seems to keep a copy of the backreference or whatever. Tried
to
debug this thing but ended in cryptical code without comments - gave up :-(
Any more suggestions?
Thanks a lot!
Stephan
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]