簡單講講關于正則表達式的入門

大家好,我是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免費指導。快來與我一起學習吧

直接點擊此鏈接:http://www.jnshu.com/login/1/10985551

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Java的正則表達式講解:(為了能看清,本文正則表達式用中文的句號代替英文句點) 英文句點符號:匹配單個任意字符。...
    紅姑娘閱讀 4,386評論 0 2
  • 1.正則表達式介紹 正則表達式算起來也是一個很龐大的語言系統,在所有的開發語言中基本都支持正則表達式,它可以很方便...
    babybus_superdo閱讀 2,593評論 3 6
  • 簡介 正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式。模式描述在搜索文...
    我為峰2014閱讀 506評論 0 2
  • 原文地址 之前在http://shukuiyan.iteye.com/blog/507915文中已經敘述過這個問題...
    hmaccelerate閱讀 880評論 0 1
  • 主人公是一位典型的LOSER,他父親做生意失利導致家庭破產,他自己的事業也走下坡路,被公司降職,女朋友跟他分手,又...
    隴西讀書與寫作閱讀 771評論 1 14