I’m trying to come up with a Java regex that will match a filename only if it has a valid extension. For example it should match ‘foo.bar’ and ‘foo.b’, but neither ‘foo.’ nor ‘foo’.
I’ve written the following test program
public static void main(String[] args) { Pattern fileExtensionPattern = Pattern.compile('\\.\\w+\\z'); boolean one = fileExtensionPattern.matcher('foo.bar').matches(); boolean two = fileExtensionPattern.matcher('foo.b').matches(); boolean three = fileExtensionPattern.matcher('foo.').matches(); boolean four = fileExtensionPattern.matcher('foo').matches(); System.out.println(one + ' ' + two + ' ' + three + ' ' + four); }
I expect this to print ‘true true false false’, but instead it prints false for all 4 cases. Where am I going wrong?
Cheers, Don
The Matcher.matches() function tries to match the pattern against the entire input. Thus, you have to add
.*to the beginning of your regex (and the\\Zat the end is superfluous, too), or use the find() method.