dfs 2002/06/27 15:38:20
Modified: src/java/org/apache/oro/text/regex Perl5MatchResult.java
Perl5Matcher.java
Log:
Applied fix for Bug report 9556 concerning storig of captured group
offests when capturing parentheses occur inside of a lookahead
assertion figuring it will only get tested if it's applied.
Revision Changes Path
1.5 +6 -2 jakarta-oro/src/java/org/apache/oro/text/regex/Perl5MatchResult.java
Index: Perl5MatchResult.java
===================================================================
RCS file: /home/cvs/jakarta-oro/src/java/org/apache/oro/text/regex/Perl5MatchResult.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Perl5MatchResult.java 17 May 2001 21:59:33 -0000 1.4
+++ Perl5MatchResult.java 27 Jun 2002 22:38:20 -0000 1.5
@@ -125,7 +125,11 @@
* @return The length of the match.
*/
public int length(){
- return _match.length();
+ int length;
+
+ length = (_endGroupOffset[0] - _beginGroupOffset[0]);
+
+ return (length > 0 ? length : 0);
}
1.19 +10 -8 jakarta-oro/src/java/org/apache/oro/text/regex/Perl5Matcher.java
Index: Perl5Matcher.java
===================================================================
RCS file: /home/cvs/jakarta-oro/src/java/org/apache/oro/text/regex/Perl5Matcher.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- Perl5Matcher.java 25 Jan 2002 09:32:28 -0000 1.18
+++ Perl5Matcher.java 27 Jun 2002 22:38:20 -0000 1.19
@@ -241,7 +241,7 @@
// Set the match result information. Only call this if we successfully
// matched.
private void __setLastMatchResult() {
- int offs;
+ int offs, maxEndOffs = 0;
//endOffset+=dontTry;
@@ -251,10 +251,6 @@
if(__endMatchOffsets[0] > __originalInput.length)
throw new ArrayIndexOutOfBoundsException();
- __lastMatchResult._match =
- new String(__originalInput, __beginMatchOffsets[0],
- __endMatchOffsets[0] - __beginMatchOffsets[0]);
-
__lastMatchResult._matchBeginOffset = __beginMatchOffsets[0];
while(__numParentheses >= 0) {
@@ -269,15 +265,21 @@
offs = __endMatchOffsets[__numParentheses];
- if(offs >= 0)
+ if(offs >= 0) {
__lastMatchResult._endGroupOffset[__numParentheses] =
offs - __lastMatchResult._matchBeginOffset;
- else
+ if(offs > maxEndOffs && offs <= __originalInput.length)
+ maxEndOffs = offs;
+ } else
__lastMatchResult._endGroupOffset[__numParentheses] =
OpCode._NULL_OFFSET;
--__numParentheses;
}
+
+ __lastMatchResult._match =
+ new String(__originalInput, __beginMatchOffsets[0],
+ maxEndOffs - __beginMatchOffsets[0]);
// Free up for garbage collection
__originalInput = null;
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.