天天看點

正規表達式 學習筆記5.1

師傅:前面學習了字元組、排除型字元組、字元組簡記法、括号、括号的多種用途、量詞、以及錨點和環視結構的使用,接下來介紹正規表達式非常有用的功能:比對模式。

徒弟:哎喲,不錯喲!

比對模式:

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 = "&lt;a href=www.sina.com.cn&gt;\nSINA\n&lt;/a&gt;";

String regex = "&lt;a href.*&lt;/a&gt;";

&lt;a href=www.sina.com.cn&gt;

SINA

&lt;/a&gt;不能夠比對正則:&lt;a href.*&lt;/a&gt;

\nSINA\n這裡使用了換行符。

用點星号來比對,發現:

那麼修改比對模式:

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

&lt;/a&gt;能夠比對正則:&lt;a href.*&lt;/a&gt;

說明:

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

繼續閱讀