天天看点

正则表达式 学习笔记5.3

模式的混合:

l 作用:同时使用多个模式

l 形式:在编译正则表达式时,把表示模式的多个参数以竖线“|”连接起来

例子:

public class MixedMode {

public static void main(String[] args) {

String str = "<a href=www.sina.com.cn>\nSINA\n</a>";

String regex = "<a href.*</a>";

Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

Matcher m = p.matcher(str);

if(m.find()){

System.out.println(str + "能够匹配正则:" + regex);

}else{

System.out.println(str + "不能够匹配正则:" + regex);

}

运行结果:

<a href=www.sina.com.cn>

SINA

</a>能够匹配正则:<a href.*</a>

模式的作用范围:

l 作用:精确控制各个模式的作用范围

l 形式:在表达式中,以 (?ismx) 的方式启用模式,以 (?-ismx) 的方式停用模式

我们知道,正则表达式一旦指定某个模式,则整个正则表达式都受这个模式的影响。

public class ModeSpanBasic {

String str = "abc";

String regex = "(?i)ABC";

Pattern p = Pattern.compile(regex);

abc能够匹配正则:(?i)ABC

不区分大小写,整个正则表达式。

某个位置停用不区分大小写的匹配:

String regex = "(?i)AB(?-i)C";

运行结果:abc不能够匹配正则:(?i)AB(?-i)C

下面看看多个模式作用范围:

String regex = "(?is)<a href.*</a>";

</a>能够匹配正则:(?is)<a href.*</a>

模式的冲突:

l 如果在正则表达式内部,通过模式作用范围指定了模式,而在外部又指定了其他模式参数,则模式作用范围的优先级更高。

public class ModeConfict {

String regex = "(?-i)ABC";

Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

abc不能够匹配正则:(?-i)ABC

小结:

l 匹配模式:改变某些结构的匹配规定

·I: 不区分大小写匹配

·S: 单行模式(点号通配模式)

·M: 多行模式

·X: 注释模式

l 模式作用范围:精确控制模式的作用范围

· (?ismx)

· (?-ismx)

l 模式的冲突:优先选择模式作用范围

本文转自jooben 51CTO博客,原文链接:http://blog.51cto.com/jooben/321020

继续阅读