Pattern类用于创建一个正则表达式(匹配模式),它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。

Pattern常用方法

1. 快速匹配

  • static boolean matches(String regex,CharSequence input):用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串。

    1. Pattern.matches("[a-z]{2}+","AA");//返回true
    2. Pattern.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+匹配到了整个字符串

  1. 我们现在回头看一下`Pattern.matcher(String regex,CharSequence input)`,它与下面这段代码等价于:<br />`Pattern.compile(regex).matcher(input).matches();`
  2. - lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true,Java代码示例:
  3. ```java
  4. Pattern p=Pattern.compile("\\d+");
  5. Matcher m=p.matcher("22bb23");
  6. m.lookingAt();//返回true,因为\d+匹配到了前面的22
  7. Matcher m2=p.matcher("aa2223");
  8. 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

  1. <a name="JFgnC"></a>
  2. #### 2. Matcher类拓展
  3. 当使用find()执行匹配操作后,就可以利用以上三个方法得到更详细的信息.
  4. - start()返回匹配到的子字符串在字符串中的索引位置.
  5. - end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置.
  6. ```java
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9. public class RegexMatches {
  10. private static final String REGEX = "\\bcat\\b";
  11. private static final String INPUT = "cat cat cat cattie cat";
  12. public static void main( String args[] ) {
  13. Pattern p = Pattern.compile(REGEX);
  14. Matcher m = p.matcher(INPUT); // get a matcher object
  15. int count = 0;
  16. while(m.find()) {
  17. count++;
  18. System.out.println("Match number "+count);
  19. System.out.println("start(): "+m.start());
  20. System.out.println("end(): "+m.end());
  21. }
  22. }
  23. }
  • 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+)(.)”;

  1. // Create a Pattern object
  2. Pattern r = Pattern.compile(pattern);
  3. // Now create matcher object.
  4. Matcher m = r.matcher(line);
  5. if (m.find( )) {
  6. System.out.println("Found value: " + m.group(0) );
  7. System.out.println("Found value: " + m.group(1) );
  8. System.out.println("Found value: " + m.group(2) );
  9. }else {
  10. System.out.println("NO MATCH");
  11. }

} }

```
Output:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0