首页 > IT知识 > 正则表达式:Java常用的匹配模式

正则表达式:Java常用的匹配模式

2017年10月25日10:41:25来源:海文国际         72
分享到:
IT知识文章: 

正则表达式:Java常用的匹配模式

1) Pattern.DOTALL

启用dotall模式。在dotall模式下,模式中的.匹配任意字符,包括换行符。在默认情况下(即未启用dotall模式),.不匹配换行符。等价于修饰符(?s)。

val p = Pattern.compile(".*", Pattern.DOTALL)val m = p.matcher("play\nscala")
println(m.matches())// 输出true

2)Pattern.MULTILINE

启用多行匹配模式。在多行匹配模式下,模式中的^和$将逐次匹配每一行的行首和行尾。在默认情况下(即未启用多行匹配模式),^和$将匹配整个字符串的首部和尾部。等价于修饰符(?m)。

val p = Pattern.compile("^.*$", Pattern.MULTILINE)val m = p.matcher("play\nscala")while (m.find()) {
 println("find: " + m.group(0))
}// 输出find: play
find: scala

3) Pattern.UNIX_LINES

启用Unix换行模式,使用"\n"标识每一行的末尾,等价于修饰符(?d)。

val p = Pattern.compile("^.*$", Pattern.UNIX_LINES | Pattern.MULTILINE)val m = p.matcher("play\r\nscala")while (m.find()) {
 println("find: " + m.group(0).length)
}// 输出find: 5find: 5

输出的两个结果长度都为5,原因是play末尾还有一个字符\r。

4)Pattern.CASE_INSENSITIVE

启用大小写不敏感匹配,等价于修饰符(?i)。

val p = Pattern.compile("^S.*A$", Pattern.CASE_INSENSITIVE)val m = p.matcher("scala")
println(m.matches())// 输出true

5)Pattern.LITERAL

启用字面(literal)模式解析,模式中的元字符和转义字符将按照普通字符解析。

val p = Pattern.compile(".*", Pattern.LITERAL)val m = p.matcher("scala")
println(m.matches())// 输出false

6)Pattern.COMMENTS

正则表达式中允许出现空白符(whitespace)和注解(comments),空白符会被忽略,以#开头的注解行也将被忽略,等价于修饰符(?x);

val p = Pattern.compile(" .* ", Pattern.COMMENTS)val m = p.matcher("scala")
println(m.matches())// 输出true

注:有些编程语言(例如JavaScript)不支持嵌入模式修饰符(embedded mode modifier),这时可以使用另一种解决方案:

[\s\S]*

[\s]会匹配任意空白字符,[\S]而则会匹配[\s]不能匹配的任意字符。把这二者组合起来构成[\s\S],这样就会得到一个包含所有字符的字符组,其中也包含了换行符。