I need to find if a String starts with “abcd” followed by 1-5 digits, then a comma, then ends with 0-3 digits.
Pattern pattern = Pattern.compile("abcd[0-9]{1,5},[0-9]{0,3}$");
String[] data = { "pqrsabcd12345,5", "abcd1234,5", "abcd1234542155,",
"abcdSD12345,555", "abcd123,555", "abcd12,5555",
"abcd,5555ffdfd", "abcd2,5555ffdfd", "abcd2,5" };
for (CharSequence input : data) {
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.format("\nI found the text %s :"
+ " \"%s\" starting at "
+ "index %d and ending at index %d.%n", input,
matcher.group(), matcher.start(), matcher.end());
}
}
The output :
I found the text pqrsabcd12345,5 : "abcd12345,5" starting at index 4 and ending at index 15.
I found the text abcd1234,5 : "abcd1234,5" starting at index 0 and ending at index 10.
I found the text abcd123,555 : "abcd123,555" starting at index 0 and ending at index 11.
I found the text abcd2,5 : "abcd2,5" starting at index 0 and ending at index 7.
Using this, I could ensure the ends with part. I think I am left with stopping Strings like "pqrsabcd12345,5"
Please let me know if I have missed something.
You just need a little modification to your regex: –
You forgot to use Caret –
^to ensure that the pattern is matched at the start of your string.Alternatively, you can also use
Matcher#matches()instead ofMatcher#find()method, if you want your pattern to match at the ends. That way you won’t need to useanchors.So, the difference between
matches()andfind()can be easily shown with your string that is not satisfying your requirement: –