天天看點

正規表達式 學習筆記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

繼續閱讀