師傅:前面學習了字元組、排除型字元組、字元組簡記法、括号、括号的多種用途、量詞、以及錨點和環視結構的使用,接下來介紹正規表達式非常有用的功能:比對模式。
徒弟:哎喲,不錯喲!
比對模式:
l 作用:改變某些結構的比對規定
l 形式:
·I: Case Insensitive
·S: SingleLine(dot All)
·M:MultiLine
·X:Comment
I:不區分大小寫的正規表達式比對。
S:點号可以比對任意字元,包括換行符
M:^和$可以比對各個問本行的開始、和結束位置。
X:允許在複雜的正規表達式中添加注釋。
I: 不區分大小寫
l 作用:在比對時,不對英文單詞區分大小寫
例子:
public class CaseInsensitive {
public static void main(String[] args) {
String str = "abc";
String regex = "ABC";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()){
System.out.println(str + "能夠比對正則:" + regex);
}else{
System.out.println(str + "不能夠比對正則:" + regex);
}
運作結果:
abc不能夠比對正則:ABC
預設情況下區分大小寫,是以比對無法成功。
下面指定不區分大小寫模式:
Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
abc能夠比對正則:ABC
CASE_INSENSITIVE
public static final int CASE_INSENSITIVE
Enables case-insensitive matching.
Case-insensitive matching can also be enabled via the embedded flag expression (?i).
Specifying this flag may impose a slight performance penalty.
See Also:
<a href="http://java.sun.com/javase/6/docs/api/constant-values.html#java.util.regex.Pattern.CASE_INSENSITIVE">Constant Field Values</a>
S: 單行模式
l 作用:更改點好.的比對規定,點号也可以比對換行符
之前在字元組簡記法中指出:點号不能比對換行符
這裡指定模式S,則點号也可以比對換行符。
public class DotMatchAll {
String str = "<a href=www.sina.com.cn>\nSINA\n</a>";
String regex = "<a href.*</a>";
<a href=www.sina.com.cn>
SINA
</a>不能夠比對正則:<a href.*</a>
\nSINA\n這裡使用了換行符。
用點星号來比對,發現:
那麼修改比對模式:
Pattern p = Pattern.compile(regex,Pattern.DOTALL);
</a>能夠比對正則:<a href.*</a>
說明:
DOTALL
public static final int DOTALL
Enables dotall mode.
In dotall mode, the expression . matches any character, including a line terminator. By default this expression does not match line terminators.
Dotall mode can also be enabled via the embedded flag expression (?s). (The s is a mnemonic for "single-line" mode, which is what this is called in Perl.)
<a href="http://java.sun.com/javase/6/docs/api/constant-values.html#java.util.regex.Pattern.DOTALL">Constant Field Values</a>
本文轉自jooben 51CTO部落格,原文連結:http://blog.51cto.com/jooben/321017