From my understanding of regular expressions, the string "00###" has to match with "[0-9]", but not with "^[0-9]$". But it doesn't work with Java regexp's.
After some investigating of this problem I found the following information (http://www.wellho.net/solutions/java-regular-expressions-in-java.html):
It might appear that Java regular
expressions are default anchored with
both a ^ and $ character.
Can we be sure that this is true for all versions of JDK? And can this mode be turned off (i.e. to disable default anchoring with ^ and $)?
解决方案
As the article you linked to explains, it depends on the function you call. If you want to add ^ and $ by default, use String#matches or Matcher#matches. If you don't want that, use the Matcher#find method instead.
import java.util.regex.*;
public class Example
{
public static void main(String[] args)
{
System.out.println("Matches: " + "abc".matches("a+"));
Matcher matcher = Pattern.compile("a+").matcher("abc");
System.out.println("Find: " + matcher.find());
}
}
Output:
Matches: false
Find: true