大家好,我是IT修真院深圳分院的學員,一枚正直純潔善良的JAVA程序員。本次為大家帶來關于正則表達式的入門。
1.背景介紹
關于歷史
正則表達式一開始是研究人類神經系統工作原理的專家提出的概念,后來正則表達式被引入到計算搜索算法的早期研究中,然后又經過程序圈幾十年的發展與迭代,到現在正則表達式已經成為程序語言中不可分割的一部分。如果你是一位接觸計算機語言的工作者,那么你會在主流操作系統(*nix[Linux,Unix等]、Windows、HP、BeOS等)、主流的開發語言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python等)、數以億萬計的各種應用軟件中,都可以看到正則表達式優美的舞姿。我們甚至可以說,現在幾乎所有的編程語言都支持正則表達式,只是因為語言的不同而略有差異。
關于正則表達式
正則表達式(Regular Expression,在代碼中常簡寫為regex、regexp或RE).
正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
通俗的講就是按照某種規則去匹配符合條件的字符串,而正則表達式定義的就是匹配規則。
2.知識剖析
元字符
(* + ? $ ^ . | \ ( ) { } [ ])
字符類
\w 匹配任何單字符 [a-zA-Z0-9]
\W 匹配任何單字符以外的字符
\d 匹配任何單數字[0-9]
\D 匹配所有數字之外的字符
\s 匹配任何Unicode空白符
\S 匹配任何Unicode空白符之外的字符
[...] 匹配任何方括號之內的字符
[^...] 匹配任何方括號之外的字符
修飾符
1、g:global全文搜索,不添加,搜索到第一個匹配停止;
2、i:ignore case忽略大小寫,默認大小寫敏感;
3、m:multiple lines多行搜索。
重復:量詞
?:出現零次或一次(最多出現一次);
+:出現一次或多次(至少出現一次);
*:出現零次或多次(任意次);
{n}:出現n次;
{n,m}:出現n到m次;
{n,}:至少出現n次。
反義 :[^]
分組:使用()可以達到分組的功能,使用量詞作用于分組
字符轉義:使用\可以達到字符轉義的功能
分枝條件:使用|可以達到分支的功能,約等于java里面的或者
貪婪與懶惰:在量詞后面加上?會變成非貪婪模式.
后向引用
零寬斷言
負向零寬斷言
處理選項
平衡組/遞歸匹配
關于正則表達式引擎
正則引擎主要可以分為兩大類:一種是DFA,一種是NFA。這兩種引擎都有了很久的歷史(至今二十多年),當中也由這兩種引擎產生了很多變體!于是POSIX的出臺規避了不必要變體的繼續產生。這樣一來,主流的正則引擎又分為3類:一、DFA,二、傳統型NFA,三、POSIX NFA。
3.常見問題
1.讀不懂正則表達式怎么辦?
?2.正則表達式在java中如何運用。
4.解決方案
1.讀不懂正則表達式怎么辦?正則表達式可視化工具:http://regexper.com
正則表達式可視化工具:http://regexper.com
一般來說,正則表達式只是用來寫的,基本上寫完,完成預期的功能后,作者就已經不知道該怎么讀自己寫的正則表達式了。
2.正則表達式在java中如何運用。
java.util.regex 包主要包括以下三個類:
Pattern 類:
pattern 對象是一個正則表達式的編譯表示。Pattern 類沒有公共構造方法。要創建一個 Pattern 對象,你必須首先調用其公共靜態編譯方法,它返回一個 Pattern對象。該方法接受一個正則表達式作為它的第一個參數。
Matcher 類:
Matcher 對象是對輸入字符串進行解釋和匹配操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher對象。
PatternSyntaxException:
PatternSyntaxException 是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。
5.編碼實戰
6.擴展思考
正則表達式這么強,我們應該怎么用?
上帝的歸上帝,正則的歸正則,分工明確。
7.參考文獻
鏈接:http://deerchao.net/tutorials/regex/regex.htm
作者:deerchao
鏈接:https://juejin.im/post/582dfcfda22b9d006b726d11
作者:水墨寒湘
8.更多討論
1.正則表達式在linux的shell腳本中有哪些命令可以使用?
sed命令.awk命令和grep命令都可以使用正則表達式。
2.怎么是用這個東西顯示的,什么網頁?
關于正則表達式的可視化工具:https://regexper.com/。這個網站是可以安裝到本地的,由GitHub管理源碼。
3.使用正則判斷輸入的郵箱符合格式是否正確。
\\w+([+.-]\\w+)*@\\w+([.-]\\w+)*\\[^\n\r\x85\u2028\u2029]\\w+([.-]\\w+)*
PPT鏈接:戳這里看PPT
騰訊視頻:騰訊視頻
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧