單詞分界符注意事項:
l \b 表示單詞分界符,要求一側是單詞字元,另一側是非單詞字元
l 單詞字元通常指的是英文字元、數字字元,對中文不适用
l 非單詞字元通常指的是各種标點符号和空白字元
例子:
public class GeneralThree {
public static void main(String[] args) {
String[] strings = {"This sentence contains word cat",
"This sentence contains word 'cat'",
"This sentence contains word vacation",
"This sentence contains word \"cate\"",
"句子裡包含的英文單詞cat0在這裡",
"句子裡包含的英文單詞cat在這裡"
};
String regex = "\\bcat\\b";
for(String str:strings){
System.out.println("處理句子:"+str);
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()){
System.out.println("找到 cat !");
}else{
System.out.println("沒有找到 cat !");
}
運作結果:
處理句子:This sentence contains word cat
找到 cat !
處理句子:This sentence contains word 'cat'
處理句子:This sentence contains word vacation
沒有找到 cat !
處理句子:This sentence contains word "cate"
處理句子:句子裡包含的英文單詞cat0在這裡
處理句子:句子裡包含的英文單詞cat在這裡
可見:
第三個、\b不能區分t0英文字元和數字字元之間的位置。
第四個、\b不能區分t在英文字元和中文字元之間的位置。
錨點:
l ^ 比對一行的開頭(有可能變化)
l $ 比對一行的結尾(有可能變化)
l \A 比對整個字元串的開頭
l \Z 比對整個字元串的末尾
^和$在不同的比對模式下,可能有所變化,比對模式的概念将在下一節課介紹。
預設情況下:
^等于\A 用來比對整個字元串的開頭
$等于\Z 用來比對整個字元串的結尾
如果比對某一個邏輯行的開頭,和某一個邏輯行的結尾?
這個需要更改比對模式。
看看這四個錨點的基本應用。
public class GeneralFour {
String[] strings = {"start"," start "," end ","end"};
String[] regexs = {"^start","\\Astart","end$","end\\Z"};
for(String regex:regexs){
System.out.println(str+"能夠比對正則:"+regex);
System.out.println(str+"不能夠比對正則:"+regex);
處理句子:start
start能夠比對正則:^start
start能夠比對正則:\Astart
start不能夠比對正則:end$
start不能夠比對正則:end\Z
處理句子: start
start 不能夠比對正則:^start
start 不能夠比對正則:\Astart
start 不能夠比對正則:end$
start 不能夠比對正則:end\Z
處理句子: end
end 不能夠比對正則:^start
end 不能夠比對正則:\Astart
end 不能夠比對正則:end$
end 不能夠比對正則:end\Z
處理句子:end
end不能夠比對正則:^start
end不能夠比對正則:\Astart
end能夠比對正則:end$
end能夠比對正則:end\Z
下面一個功能:
環視
l 錨點對位置的判斷不夠靈活
l 作用:應用子表達式對位置進行判斷
l 形式:
· (?=...)
· (?!...)
· (?<...)
· (?<!...)
形式
名稱
比對意義
(?=...)
肯定順序環視
右側文本能由子表達式比對
(?!...)
否定順序環視
右側文本不能由子表達式比對
(?<...)
肯定逆序環視
左側文本能由子表達式比對
(?<!...)
否定逆序環視
左側文本不能由子表達式比對
首先看看順序環視結構的例子:
public class GeneralFive {
String[] strings = new String[]{"Jeff","Jeffrey","Jefferson"};
String[] regexs = new String[]{"Jeff","Jeff(?=rey)","Jeff(?!rey)"};
System.out.println("\"" + str +"\" 能夠比對正則:"+regex);
System.out.println("\"" + str +"\" 不能夠比對正則:"+regex);
System.out.println("");
"Jeff" 能夠比對正則:Jeff
"Jeffrey" 能夠比對正則:Jeff
"Jefferson" 能夠比對正則:Jeff
"Jeff" 不能夠比對正則:Jeff(?=rey)
"Jeffrey" 能夠比對正則:Jeff(?=rey)
"Jefferson" 不能夠比對正則:Jeff(?=rey)
"Jeff" 能夠比對正則:Jeff(?!rey)
"Jeffrey" 不能夠比對正則:Jeff(?!rey)
"Jefferson" 能夠比對正則:Jeff(?!rey)
未完待續。。。
本文轉自jooben 51CTO部落格,原文連結:http://blog.51cto.com/jooben/318584