大家好立肘,我是IT修真院深圳分院的學(xué)員佑菩,一枚正直純潔善良的JAVA程序員秘狞。本次為大家?guī)黻P(guān)于正則表達(dá)式的入門嗤疯。
1.背景介紹
關(guān)于歷史
正則表達(dá)式一開始是研究人類神經(jīng)系統(tǒng)工作原理的專家提出的概念,后來正則表達(dá)式被引入到計(jì)算搜索算法的早期研究中摩桶,然后又經(jīng)過程序圈幾十年的發(fā)展與迭代桥状,到現(xiàn)在正則表達(dá)式已經(jīng)成為程序語言中不可分割的一部分。如果你是一位接觸計(jì)算機(jī)語言的工作者典格,那么你會在主流操作系統(tǒng)(*nix[Linux,Unix等]岛宦、Windows、HP耍缴、BeOS等)砾肺、主流的開發(fā)語言(delphi、Scala防嗡、PHP变汪、C#、Java蚁趁、C++裙盾、Objective-c、Swift、VB番官、Javascript庐完、Ruby以及Python等)、數(shù)以億萬計(jì)的各種應(yīng)用軟件中徘熔,都可以看到正則表達(dá)式優(yōu)美的舞姿门躯。我們甚至可以說,現(xiàn)在幾乎所有的編程語言都支持正則表達(dá)式酷师,只是因?yàn)檎Z言的不同而略有差異讶凉。
關(guān)于正則表達(dá)式
正則表達(dá)式(Regular Expression,在代碼中常簡寫為regex山孔、regexp或RE).
正則表達(dá)式是對字符串操作的一種邏輯公式懂讯,就是用事先定義好的一些特定字符、及這些特定字符的組合台颠,組成一個“規(guī)則字符串”褐望,這個“規(guī)則字符串”用來表達(dá)對字符串的一種過濾邏輯。
通俗的講就是按照某種規(guī)則去匹配符合條件的字符串蓉媳,而正則表達(dá)式定義的就是匹配規(guī)則譬挚。
2.知識剖析
元字符
(* + ? $ ^ . | \ ( ) { } [ ])
字符類
\w 匹配任何單字符 [a-zA-Z0-9]
\W 匹配任何單字符以外的字符
\d 匹配任何單數(shù)字[0-9]
\D 匹配所有數(shù)字之外的字符
\s 匹配任何Unicode空白符
\S 匹配任何Unicode空白符之外的字符
[...] 匹配任何方括號之內(nèi)的字符
[^...] 匹配任何方括號之外的字符
修飾符
1、g:global全文搜索酪呻,不添加,搜索到第一個匹配停止盐须;
2玩荠、i:ignore case忽略大小寫,默認(rèn)大小寫敏感贼邓;
3阶冈、m:multiple lines多行搜索。
重復(fù):量詞
?:出現(xiàn)零次或一次(最多出現(xiàn)一次)塑径;
+:出現(xiàn)一次或多次(至少出現(xiàn)一次)女坑;
*:出現(xiàn)零次或多次(任意次);
{n}:出現(xiàn)n次统舀;
{n,m}:出現(xiàn)n到m次匆骗;
{n,}:至少出現(xiàn)n次。
反義 :[^]
分組:使用()可以達(dá)到分組的功能誉简,使用量詞作用于分組
字符轉(zhuǎn)義:使用\可以達(dá)到字符轉(zhuǎn)義的功能
分枝條件:使用|可以達(dá)到分支的功能,約等于java里面的或者
貪婪與懶惰:在量詞后面加上?會變成非貪婪模式.
后向引用
零寬斷言
負(fù)向零寬斷言
處理選項(xiàng)
平衡組/遞歸匹配
關(guān)于正則表達(dá)式引擎
正則引擎主要可以分為兩大類:一種是DFA浑娜,一種是NFA狱意。這兩種引擎都有了很久的歷史(至今二十多年),當(dāng)中也由這兩種引擎產(chǎn)生了很多變體!于是POSIX的出臺規(guī)避了不必要變體的繼續(xù)產(chǎn)生碉熄。這樣一來桨武,主流的正則引擎又分為3類:一、DFA锈津,二玻募、傳統(tǒng)型NFA,三一姿、POSIX NFA七咧。
3.常見問題
1.讀不懂正則表達(dá)式怎么辦?
?2.正則表達(dá)式在java中如何運(yùn)用叮叹。
4.解決方案
1.讀不懂正則表達(dá)式怎么辦艾栋?正則表達(dá)式可視化工具:http://regexper.com
正則表達(dá)式可視化工具:http://regexper.com
一般來說,正則表達(dá)式只是用來寫的蛉顽,基本上寫完蝗砾,完成預(yù)期的功能后,作者就已經(jīng)不知道該怎么讀自己寫的正則表達(dá)式了携冤。
2.正則表達(dá)式在java中如何運(yùn)用悼粮。
java.util.regex 包主要包括以下三個類:
Pattern 類:
pattern 對象是一個正則表達(dá)式的編譯表示。Pattern 類沒有公共構(gòu)造方法曾棕。要創(chuàng)建一個 Pattern 對象扣猫,你必須首先調(diào)用其公共靜態(tài)編譯方法,它返回一個 Pattern對象翘地。該方法接受一個正則表達(dá)式作為它的第一個參數(shù)申尤。
Matcher 類:
Matcher 對象是對輸入字符串進(jìn)行解釋和匹配操作的引擎。與Pattern 類一樣衙耕,Matcher 也沒有公共構(gòu)造方法昧穿。你需要調(diào)用 Pattern 對象的 matcher 方法來獲得一個 Matcher對象。
PatternSyntaxException:
PatternSyntaxException 是一個非強(qiáng)制異常類橙喘,它表示一個正則表達(dá)式模式中的語法錯誤时鸵。
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
正則表達(dá)式這么強(qiáng),我們應(yīng)該怎么用厅瞎?
上帝的歸上帝饰潜,正則的歸正則,分工明確磁奖。
7.參考文獻(xiàn)
鏈接:http://deerchao.net/tutorials/regex/regex.htm
作者:deerchao
鏈接:https://juejin.im/post/582dfcfda22b9d006b726d11
作者:水墨寒湘
8.更多討論
1.正則表達(dá)式在linux的shell腳本中有哪些命令可以使用囊拜?
sed命令.awk命令和grep命令都可以使用正則表達(dá)式。
2.怎么是用這個東西顯示的比搭,什么網(wǎng)頁冠跷?
關(guān)于正則表達(dá)式的可視化工具:https://regexper.com/南誊。這個網(wǎng)站是可以安裝到本地的,由GitHub管理源碼蜜托。
3.使用正則判斷輸入的郵箱符合格式是否正確抄囚。
\\w+([+.-]\\w+)*@\\w+([.-]\\w+)*\\[^\n\r\x85\u2028\u2029]\\w+([.-]\\w+)*
PPT鏈接:戳這里看PPT
騰訊視頻:騰訊視頻
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現(xiàn)在開始橄务,找個師兄幔托,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏蜂挪,學(xué)習(xí)的路上不再迷弥靥簦”。
這里是技能樹.IT修真院棠涮,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線谬哀,學(xué)習(xí)透明化,成長可見化严肪,師兄1對1免費(fèi)指導(dǎo)史煎。快來與我一起學(xué)習(xí)吧
直接點(diǎn)擊此鏈接:http://www.jnshu.com/login/1/10985551