Pattern类用于创建一个正则表达式(匹配模式),它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。
Pattern常用方法
1. 快速匹配
static boolean matches(String regex,CharSequence input):用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串。Pattern.matches("[a-z]{2}+","AA");//返回truePattern.matches("[a-z]{2}","A2");//返回false,需要匹配到所有字符串才能返回true
2. 多次匹配
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
static Pattern complie(String regex):创建Pattern对象String pattern():返回正则表达式的字符串形式,其实就是返Pattern.complile(String regex)的regex参数。Matcher Pattern.matcher(CharSequence input):Matcher类的构造方法也是私有的,不能随意创建,只能通过此方法得到该类的实例。Matcher常用方法
1. matches(), lookAt(), find()
Matcher类提供三个匹配操作方法它们分别是Matcher.matches(),Matcher.lookingAt()和Matcher.find(),三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false。matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true ```java Pattern p=Pattern.compile(“\d+”); Matcher m=p.matcher(“22bb23”); m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2=p.matcher(“2223”); m2.matches();//返回true,因为\d+匹配到了整个字符串
我们现在回头看一下`Pattern.matcher(String regex,CharSequence input)`,它与下面这段代码等价于:<br />`Pattern.compile(regex).matcher(input).matches();`- lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true,Java代码示例:```javaPattern p=Pattern.compile("\\d+");Matcher m=p.matcher("22bb23");m.lookingAt();//返回true,因为\d+匹配到了前面的22Matcher m2=p.matcher("aa2223");m2.lookingAt();//返回false,因为\d+不能匹配前面的aa
- find()对字符串进行匹配,匹配到的字符串可以在任何位置. Java代码示例: ```java Pattern p=Pattern.compile(“\d+”); Matcher m=p.matcher(“22bb23”); m.find();//返回true
Matcher m2=p.matcher(“aabb”); m2.find();//返回false
<a name="JFgnC"></a>#### 2. Matcher类拓展当使用find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.- start()返回匹配到的子字符串在字符串中的索引位置.- end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.```javaimport java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexMatches {private static final String REGEX = "\\bcat\\b";private static final String INPUT = "cat cat cat cattie cat";public static void main( String args[] ) {Pattern p = Pattern.compile(REGEX);Matcher m = p.matcher(INPUT); // get a matcher objectint count = 0;while(m.find()) {count++;System.out.println("Match number "+count);System.out.println("start(): "+m.start());System.out.println("end(): "+m.end());}}}
- group(int index)返回匹配到的子字符串 ```java import java.util.regex.Matcher; import java.util.regex.Pattern;
public class RegexMatches { public static void main( String args[] ) { // String to be scanned to find the pattern. String line = “This order was placed for QT3000! OK?”; String pattern = “(.)(\d+)(.)”;
// Create a Pattern objectPattern r = Pattern.compile(pattern);// Now create matcher object.Matcher m = r.matcher(line);if (m.find( )) {System.out.println("Found value: " + m.group(0) );System.out.println("Found value: " + m.group(1) );System.out.println("Found value: " + m.group(2) );}else {System.out.println("NO MATCH");}
} }
```
Output:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0
