大神養成記系列 正規表示式

2021-08-20 19:33:26 字數 3116 閱讀 7319

由於最近實驗常常會用到正規表示式,所以我乙個不開心,就去學習學習,下面是一些筆記和心得

1)美國紐澤西州的warren mcculloch和出生在美國底特律的walter pitts這兩位神經生理方面的科學家,研究出了一種用數學方式來描述神經網路的新方法,他們創造性地將神經系統中的神經元描述成了小而簡單的自動控制元,從而作出了一項偉大的工作革新。

2)在1956 年,出生在被馬克·吐溫(mark twain)稱為「美國最美麗的城市之一」的哈特福德市的一位名叫stephen kleene的數學科學家,他在warren mcculloch和walter pitts早期工作的基礎之上,發表了一篇題目是《神經網事件的表示法》的**,利用稱之為正則集合的數學符號來描述此模型,引入了正規表示式的概念。正規表示式被作為用來描述其稱之為「正則集的代數」的一種表示式,因而採用了「正規表示式」這個術語。

3)之後一段時間,人們發現可以將這一工作成果應用於其他方面。ken thompson就把這一成果應用於計算搜尋演算法的一些早期研究,ken thompson是 unix的主要發明人,也就是大名鼎鼎的unix之父。unix之父將此符號系統引入編輯器qed,然後是unix上的編輯器ed,並最終引入grep。

正規表示式是一種特殊的字串模式,用來匹配一組字串。利用給定的組成規則和字元來匹配表示式,用處如下:

1 測試字串內的模式。 例如,可以測試輸入字串,以檢視字串內是否出現**號碼模式或信用卡號碼模式。這稱為資料驗證。

2 替換文字。 可以使用正規表示式來識別文件中的特定文字,完全刪除該文字或者用其他文字替換它。

3 基於模式匹配從字串中提取子字串。 可以查詢文件內或輸入域內特定的文字

1. 定界符

分隔符可以使任意非字母數字、非反斜線、非空白字元,定界符使用特殊符號,像~~、!!、##等;不要使用\當作定界符;如果分隔符需要在模式內進行匹配,它必須使用反斜線進行轉義;如果分隔符經常出現在模式內,最好使用其他分隔符進行替換

2.原子(原子是匹配模式中最基礎的組成部分,每個模式至少包含乙個原子)

普通原子

可見原子

a-z、a-z、0-9

不可見原子

\n、\r、\t、\v、\f

特殊字元

$()+

匹配一次或多次其前的原子,等價於

?匹配0次或1次其前的原子,等價於

.匹配除了換行符以外的任意乙個字元

|匹配兩個或多個分支選擇

表示其前面的原子恰好出現n次

表示其前的原子出現不小於n次,即大於等於n次

表示其前的原子至少出現n次,最多出現m次

^或\a

匹配輸入字元的開始的位置(或在多行模式下行的開頭,即緊隨乙個換行符之後)

$或\z

匹配輸入字串的結束位置(活在多行模式下行的結尾,即緊隨乙個換行符之前)

\b匹配單詞的邊界

\b匹配單詞的邊界以外的部分

匹配方括號中的任意乙個原子

[^]匹配除了方括號中的原子以外的任意乙個字元

()匹配其整體為乙個原子,即模式單元。

選擇用圓括號將所有選擇項括起來,相鄰的選擇項之間用|分隔。

但用圓括號會有乙個***,是相關的匹配會被快取,此時可用?:放在第乙個選項前來消除這種***。

其中?:是非捕獲元之一,還有兩個非捕獲元是?=和?!,這兩個還有更多的含義,前者為正向預查,在任何開始匹配圓括號內的正規表示式模式的位置來匹配搜尋字串,後者為負向預查,在任何開始不匹配該正規表示式模式的位置來匹配搜尋字串

反向引用

對乙個正規表示式模式或部分模式兩邊新增圓括號將導致相關匹配儲存到乙個臨時緩衝區中,所捕獲的每個子匹配都按照在正規表示式模式中從左到右出現的順序儲存

緩衝區編號從 1 開始,最多可儲存 99 個捕獲的子表示式

每個緩衝區都可以使用 '\n' 訪問,其中 n 為乙個標識特定緩衝區的一位或兩位十進位制數。

可以使用非捕獲元字元 '?:'、'?=' 或 '?!' 來重寫捕獲,忽略對相關匹配的儲存

4 正則補充

捕獲 (exp)

匹配exp,並捕獲文字到自動命名的組裡

(?exp)

匹配exp,並捕獲文字到名稱為name的組裡,可以寫成(?'name'exp)

使用命名捕獲分組可以通過\k進行引用

(?:exp)

匹配exp,不捕獲匹配的文字,也不給此組分配組號

環視(零寬斷言)

(?=exp)

匹配exp前面的位置

(?!exp)

匹配後面跟的不是exp的位置

(?<=exp)

匹配exp後面的位置

(?匹配前面不是exp的位置

注釋 (?#comment)

注釋,不對正規表示式的處理產生任何影響

正規表示式優化

使用字元組代替分支條件

優先選擇最左端的匹配結果

標準量詞是匹配優先的

謹慎用點號,盡可能不用*和+這樣的任意量詞

能用字串函式處理的就盡量使用字串函式處理

合理使用括號

能確定起始和結束位置盡量使用^和$

可以對比較大的正規表示式進行拆分匹配

四 正規表示式運算子優先順序 

正規表示式從左到右進行計算,並遵循優先順序順序,這與算術表示式非常類似;相同優先順序的從左到右進行運算,不同優先順序的運算先高後低。

2 網域名稱:[a-za-z0-9][-a-za-z0-9](/.[a-za-z0-9][-a-za-z0-9])+/.?

3 interneturl:[a-za-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

4 手機號碼:^(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$

9 漢字:^[\u4e00-\u9fa5]$

10 英文和數字:^[a-za-z0-9]+$ 或 ^[a-za-z0-9]$

11 長度為3-20的所有字元:^.$

12 由26個英文本母組成的字串:^[a-za-z]+$

13 數字:^[0-9]*$

14 n位的數字:^\d$

15 零和非零開頭的數字:^(0|[1-9][0-9]*)$

正規表示式系列

首先需要引用 using system.text.regularexpressions 數字正規表示式 private static regex regnumber new regex 0 9 數字可帶正負號 private static regex regnumbersign new regex ...

記 正規表示式學習

1 符號.匹配除斷行外任意乙個字元。2 w 匹配阿拉伯數字 英文大小寫字母和下劃線。w 匹配被 w排除在外的字元 w的補集 3 d 匹配阿拉伯數字。d 匹配非阿拉伯數字 d的補集 4 s 匹配空白字元 空格 製表符 斷行等。s 匹配被 w排除在外的字元 s的補集 5 unicode 萬國碼,用數字代...

python大佬養成計畫 正規表示式

re regular experssion re 模組使 python 語言擁有全部的正規表示式功能。compile 函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。作用 對於字串進行處理,會檢查這個字串內容是否與你寫的正規表示式匹配 如果匹...