模式的混合:
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