You are viewing a plain text version of this content. The canonical link for it is here.
Posted to regexp-dev@jakarta.apache.org by jo...@locus.apache.org on 2000/06/22 22:39:03 UTC
cvs commit: jakarta-regexp/src/java/org/apache/regexp RE.java
jon 00/06/22 13:39:02
Modified: src/java/org/apache/regexp RE.java
Log:
If I create a regular expression using the expression "foo" with case
independence turned on, the RE class will not match "Foo", nor will it
match
"the Foo".
The problem seems to be related to some "prefix optimization" code I
found.
If a prefix match is to be performed, the code does not match the prefix
when the case independent flag is on.
Kurt Westerfeld <ku...@ManagedObjects.com>
Revision Changes Path
1.5 +13 -3 jakarta-regexp/src/java/org/apache/regexp/RE.java
Index: RE.java
===================================================================
RCS file: /home/cvs/jakarta-regexp/src/java/org/apache/regexp/RE.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- RE.java 2000/05/26 18:13:46 1.4
+++ RE.java 2000/06/22 20:39:01 1.5
@@ -347,7 +347,7 @@
* @see RECompiler
*
* @author <a href="mailto:jonl@muppetlabs.com">Jonathan Locke</a>
- * @version $Id: RE.java,v 1.4 2000/05/26 18:13:46 jon Exp $
+ * @version $Id: RE.java,v 1.5 2000/06/22 20:39:01 jon Exp $
*/
public class RE
{
@@ -1488,11 +1488,17 @@
else
{
// Prefix-anchored matching is possible
+ boolean caseIndependent = (matchFlags & MATCH_CASEINDEPENDENT) != 0;
char[] prefix = program.prefix;
for ( ;! search.isEnd(i + prefix.length - 1); i++)
{
// If the first character of the prefix matches
- if (search.charAt(i) == prefix[0])
+ boolean match = false;
+ if (caseIndependent)
+ match = Character.toLowerCase(search.charAt(i)) == Character.toLowerCase(prefix[0]);
+ else
+ match = search.charAt(i) == prefix[0];
+ if (match)
{
// Save first character position
int firstChar = i++;
@@ -1500,7 +1506,11 @@
for (k = 1; k < prefix.length; )
{
// If there's a mismatch of any character in the prefix, give up
- if (search.charAt(i++) != prefix[k++])
+ if (caseIndependent)
+ match = Character.toLowerCase(search.charAt(i++)) == Character.toLowerCase(prefix[k++]);
+ else
+ match = search.charAt(i++) == prefix[k++];
+ if (!match)
{
break;
}