一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java正則表達式易錯知識點匯總

Java正則表達式易錯知識點匯總

2020-03-11 13:46leizhimin JAVA教程

這篇文章主要總結Java正則表達式易錯知識,對易錯知識點進行分類整理,幫助大家更好的學習Java正則表達式,感興趣的小伙伴們可以參考一下

一、概述
正則表達式是Java處理字符串、文本的重要工具。
Java對正則表達式的處理集中在以下兩個類:
java.util.regex.Matcher   模式類用來表示一個編譯過的正則表達式。
java.util.regex.Pattern   匹配類:用模式匹配一個字符串所表達的抽象結果。
(很遺憾,Java Doc并沒有給出這兩個類的職責概念。) 
比如一個簡單例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
* 正則表達式例子
*
* @author leizhimin 2009-7-17 9:02:53
*/
public class TestRegx {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("f(.+?)k");
        Matcher m = p.matcher("fckfkkfkf");
        while (m.find()) {
            String s0 = m.group();
            String s1 = m.group(1);
            System.out.println(s0 + "||" + s1);
        }
        System.out.println("---------");
        m.reset("fucking!");
        while (m.find()) {
            System.out.println(m.group());
        }
 
        Pattern p1 = Pattern.compile("f(.+?)i(.+?)h");
        Matcher m1 = p1.matcher("finishabigfishfrish");
        while (m1.find()) {
            String s0 = m1.group();
            String s1 = m1.group(1);
            String s2 = m1.group(2);
            System.out.println(s0 + "||" + s1 + "||" + s2);
        }
 
        System.out.println("---------");
        Pattern p3 = Pattern.compile("(19|20)\\d\\d([- /.])(0[1-9]|1[012])\\2(0[1-9]|[12][0-9]|3[01])");
        Matcher m3 = p3.matcher("1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31");
        while (m3.find()) {
            System.out.println(m3.group());
        }
    }
}

輸出結果:
fck||c
fkk||k
---------
fuck
finish||in||s
fishfrish||ishfr||s
---------
1900-01-01
2007/08/13
1900.01.01
1900 01 01
1900 02 31

Process finished with exit code 0
 二、一些容易迷糊的問題
 1、Java對反斜線處理的問題 
在其他語言中,\\表示要插入一個字符\;
在Java語言中,\\表示要插入正則表達式的反斜線,并且后面的字符有特殊意義。 
a.預定義字符類
. 任何字符(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]

 但是看看上面程序,對比下不難看出:
\d在實際使用的時候就寫成了 \\d;
在Java正則表達式中,如果要插入一個\字符,則需要在正則表達式中寫成\\\\,原因是下面的APIDoc定義\\表示一個反斜線。
但是如果在正則表示式中表示回車換行等,則不需要多添加反斜線了。比如回車\r就寫作\r. 
b.字符
x 字符 x
\\ 反斜線字符
\0n 帶有八進制值 0 的字符 n (0 <= n <= 7)
\0nn 帶有八進制值 0 的字符 nn (0 <= n <= 7)
\0mnn 帶有八進制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 帶有十六進制值 0x 的字符 hh
\uhhhh 帶有十六進制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 回車符 ('\u000D')
\f 換頁符 ('\u000C')
\a 報警 (bell) 符 ('\u0007')
\e 轉義符 ('\u001B')
\cx 對應于 x 的控制符
2、Matcher.find():嘗試查找與模式匹配的字符序列的下一個子序列。此方法從字符序列的開頭開始,如果該方法的前一次調用成功了并且從那時開始匹配器沒有被重置,則從以前匹配操作沒有匹配的第一個字符開始,即如果前一次找到與模式匹配的子序列則這次從這個子序列后開始查找。
3、Matcher.matchers():判斷整個字符序列與模式是否匹配。當連續用Matcher對象檢查多個字符串時候,可以使用
Matcher.reset():重置匹配器,放棄其所有顯式狀態信息并將其添加位置設置為零。
或者Matcher.reset(CharSequence input)  重置此具有新輸入序列的匹配器,來重復使用匹配器。
4、組的概念,這個概念很重要,組是用括號劃分的正則表達式,可以通過編號來引用組。組號從0開始,有幾對小括號就表示有幾個組,并且組可以嵌套,組號為0的表示整個表達式,組號為1的表示第一個組,依此類推。
例如:A(B)C(D)E正則式中有三組,組0是ABCDE,組1是B,組2是D;
A((B)C)(D)E正則式中有四組:組0是ABCDE,組1是BC,組2是B;組3是C,組4是D。 
int groupCount():返回匹配其模式中組的數目,不包括第0組。
String group():返回前一次匹配操作(如find())的第0組。
String group(int group):返回前一次匹配操作期間指定的組所匹配的子序列。如果該匹配成功,但指定組未能匹配字符序列的任何部分,則返回 null。
int start(int group):返回前一次匹配操作期間指定的組所匹配的子序列的初始索引。
int end(int group):返回前一次匹配操作期間指定的組所匹配的子序列的最后索引+1。
5、匹配的范圍的控制
最變態的就要算lookingAt()方法了,名字很讓人迷惑,需要認真看APIDoc。 
start()  返回以前匹配的初始索引。
end()  返回最后匹配字符之后的偏移量。
public boolean lookingAt()嘗試將從區域開頭開始的輸入序列與該模式匹配。
與 matches 方法類似,此方法始終從區域的開頭開始;與之不同的是,它不需要匹配整個區域。
如果匹配成功,則可以通過 start、end 和 group 方法獲取更多信息。
返回:
當且僅當輸入序列的前綴匹配此匹配器的模式時才返回 true。
小編為大家整理了這些易混知識點,但是還是不夠全面,需要大家在之后的學習中不斷積累,正則表達式最大的難點在于熟練書寫正則表達式,大家應該針對難點進行學習,相信一定會有所收獲。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品资源在线观看网站 | 91精品久久国产青草 | 欧美一级片免费看 | 国内精品 大秀视频 日韩精品 | 91李宗精品72集在线观看 | 成人网子 | 国四虎影永久 | 国产农村一级特黄α真人毛片 | 特大黑人娇小亚洲女mp4 | 春意影院午夜爽爽爽免费 | 免费看国产精品久久久久 | 亚洲视频第一页 | 免费精品在线 | 99小视频| 天天做日日做 | 亚洲精品成人AV在线观看爽翻 | 国内精品 大秀视频 日韩精品 | 欧美视频在线播放观看免费福利资源 | 亚洲图片一区二区 | 四虎影院免费视频 | 国产手机在线αⅴ片无码观看 | 亚洲精品第一国产综合 | 国产精品一区二区在线观看完整版 | 欧美日韩精品一区二区三区高清视频 | 好吊日在线 | 国产免费午夜 | 久久视频这有精品63在线国产 | 99午夜| 亚洲成人免费 | 白丝女榨干蹂躏我 | 国产91一区二区在线播放不卡 | 国产精品久久国产精品99盘 | 3黑人巨大vs北岛玲 3d肉浦团在线观看 3d动漫免费 | 小伙无套内射老女人 | 欧美贵妇videos办公室360 | 午夜A级理论片左线播放 | 欧美yyy| 九九九国产在线 | 亚洲国产网址 | 67194最新网址 | 免费观看国产视频 |