探秘正規表示式

2022-05-22 14:39:09 字數 903 閱讀 9445

今天有個同事問起,php中的正則語法為什麼和perl中的正則語法如此的類似,是誰相容誰?到底正則是什麼?所以有了這篇文章

在我們的日常工作中,無論是在php中用正則匹配字串,還是nginx用正則重寫url,還是在vi中查詢字元,總是,用處很多也很方便。

那到底什麼是正規表示式?為什麼各個應用中正則的語法大都相同?下面我們來說一下這幾個問題

歷史由來:最初的正規表示式出現於理論電腦科學的自動控制理論和形式化語言理論中。在這些領域中有對計算(自動控制)的模型和對形式化語言描述與分類的研究。2023年,warren mcculloch與walter pitts將神經系統中的神經元描述成小而簡單的自動控制元。2023年代,數學家史蒂芬·科爾·克萊尼利用稱之為「正則集合」的數學符號來描述此模型。肯·湯普遜將此符號系統引入編輯器qed,然後是unix上的編輯器ed,並最終引入grep。自此,正規表示式被廣泛地使用於各種unix或者類似unix的工具,例如perl。perl的正規表示式源自於henry spencer寫的regex,它已經演化成了pcre(perl相容正規表示式,perl compatible regular expressions),乙個由philip hazel開發的,為很多現代工具所使用的庫。

大家都明白了吧,我們在ed、grep、perl中使用的正則都是在這幾個程式中獨立實現的,而在我們的nginx、php、mysql等各種語言系統或應用中都是引用pcre庫函式,同時pcre的庫函式也支援posix協議,方便外部應用的統一呼叫,這也是我們為什麼安裝這些軟體的時候機器上要安裝pcre軟體包。

總而言之,正規表示式是用一定語法的字串來匹配符合規則的字串的一種思維方式,無論採用哪種實現的引擎,內部採用何種演算法,都是為了更方便更快速的查詢到我們需要的東西,至於是獨立實現還是引用寫好的庫函式更不是那麼的重要了。至於語法的大同小異,也是由於各種應用下不同的情況下具體定製的,知道就可以了。

Python中的正規表示式探秘1

正規表示式中的特殊字元 匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 也匹配 n 或 r 要匹配 字元本身,請使用 標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 和 匹配前面的子表示式零次或多次。要匹配 字元,請使用 ...

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...