NOTE: This is NOT a question about case-insensitive matching. It is a question about regex
anchors.
I'm having a lot of trouble doing basic case insensitive matching in Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class match {
public static void main(String[] args) {
String prompt="das101.lo1>";
String str="automate@DAS101.LO1>";
Pattern ignore = Pattern.compile(prompt.toUpperCase(), Pattern.CASE_INSENSITIVE);
Matcher mIgn = ignore.matcher(str);
if(mIgn.matches())
System.out.println(str+" Matches " + prompt.toUpperCase());
else
System.out.println(str+" Doesn't Match " + prompt.toUpperCase());
char[] cStr = str.toCharArray();
char[] cPrompt = prompt.toUpperCase().toCharArray();
/* Verify that strings match */
for(int i=cPrompt.length-1, j=cStr.length-1; i>=0 && j>=0 ; --i,--j) {
if (cPrompt[i]==cStr[j])
System.out.println("Same: "+ cPrompt[i]+":" + cStr[j]);
else
System.out.println("Different: "+ cPrompt[i]+":" + cStr[j]);
}
}
}
The output:
samveen@javadev-tahr:/tmp$ javac match.java
samveen@javadev-tahr:/tmp$ java match
automate@DAS101.LO1> Doesn't Match DAS101.LO1>
Same: >:>
Same: 1:1
Same: O:O
Same: L:L
Same: .:.
Same: 1:1
Same: 0:0
Same: 1:1
Same: S:S
Same: A:A
Same: D:D
If I change if(mIgn.matches())
to if(mIgn.find())
, I get this simple string pattern match working:
samveen@javadev-tahr:/tmp$ javac match.java
samveen@javadev-tahr:/tmp$ java match
automate@DAS101.LO1> Matches DAS101.LO1>
Same: >:>
Same: 1:1
Same: O:O
Same: L:L
Same: .:.
Same: 1:1
Same: 0:0
Same: 1:1
Same: S:S
Same: A:A
Same: D:D
Where am I going wrong?
I referred to Case-Insensitive Matching in Java RegEx and Methods of the Pattern Class