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();
}