Java 正则表达式之Pattern和Matcher

Java的regex库

java里预留了一个regex库,方便于我们在Java里操作正则表达式,或者用它来匹配字符串。

其中比较常用的就是 Pattern 和 Matcher ,pattern是一个编译好的正则表达式,而Mather是一个正则表达式适配器,Mather的功能很强大,所以我们一般用pattern 来获取一个Matcher对象,然后用Matcher来操作正则表达式。

  • Pattern类的作用在于编译正则表达式后创建一个匹配模式.
  • Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Pattern类

常用方法及介绍:

  • Pattern complie(String regex)
    由于Pattern的构造函数是私有的,不可以直接创建,所以通过静态方法compile(String regex)方法来创建,将给定的正则表达式编译并赋予给Pattern类。

  • String pattern()
    返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数。

  • Pattern compile(String regex, int flags) 增加了flag参数,方法功能和compile(String regex)相同。

  • int flags() 返回当前Pattern的匹配flag参数。

  • flag 参数用来控制正则表达式的匹配行为,可取值范围如下:

    • Pattern.CANON_EQ 当且仅当两个字符的”正规分解(canonical decomposition)”都完全相同的情况下,才认定匹配.比如用了这个标志之后,表达式”a\u030A”会匹配”?”.默认情况下,不考虑”规范相等性(canonical equivalence)”.

    • Pattern.CASE_INSENSITIVE 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集.这个标志能让表达式忽略大小写进行匹配。

    • Pattern.COMMENTS 在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的”\s”,而是指表达式里的空格,tab,回车之类).注释从#开始,一直到这行结束.可以通过嵌入式的标志来启用Unix行模式.

    • Pattern.DOTALL 在这种模式下,表达式’.’可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式’.’不匹配行的结束符.

    • Pattern.MULTILINE 在这种模式下,’^’和’’也匹配字符串的结束.默认情况下,这两个表达式仅仅匹配字符串的开始和结束.

    • Pattern.UNICODE_CASE 在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配.默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集.

    • Pattern.UNIX_LINES 在这个模式下,只有’\n’才被认作一行的中止,并且与’.’,’^’,以及’$’进行匹配.

  • Pattern.matcher(CharSequence input) 对指定输入的字符串创建一个Matcher对象


Matcher类

常用方法及介绍:

  • boolean find() 对字符串进行匹配,匹配到的字符串可以在任何位置
  • String group() 返回匹配到的子字符串

示例:匹配邮箱
Pattern VALID_EMAIL_ADDRESS_REGEX =
            Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);

boolean isEmail(String emailStr) {
      Matcher matcher = VALID_EMAIL_ADDRESS_REGEX.matcher(emailStr);
      return matcher.find();
}

你可能感兴趣的:(Java 正则表达式之Pattern和Matcher)