正規表示式及測試工具

2022-02-16 09:51:07 字數 3532 閱讀 4987

1. 正規表示式

正規表示式:一種匹配文字中的字串行的字元模式。在很多文字編輯器或其他工具裡,正規表示式通常被用來檢索或替換那些符合某種模式的文字內容。許多程式語言都支援利用正規表示式進行字串操作。

乙個正規表示式就是由普通字元(例如字元『a』

到『z』)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。

1.1 元字元

字元描述

例項\d

匹配任意的數字

\d\d可以匹配12,但不匹配a1或1a等

\d匹配任意的非數字字元

\d\d匹配a@,不匹配12

\w匹配單詞字元(包括字母、數字、下劃線和漢字)

\w匹配任意的非單詞字元(包括字母、數字、下劃線和漢字)

\w匹配@等,不匹配a

\s匹配任何空白字元,包括空格、製表符、換行符等

\s匹配任意非空白字元

匹配除換行符之外的任意字元

匹配行的開始位置

"^the":表示所有以"the"開始的字串("there","the cat"等)

匹配行的結束位置

"of despair$":表示以"of despair"結尾的字串

\b匹配單詞的開始或結束位置

"\bcat"將匹配 "cat cat cat"首尾的"cat",中間的"cat"不會被匹配上

\b\b的補集

"\bcat"將匹配 "cat cat cat"中間的"cat"

2. 字元類

在正規表示式中,元字元通常一次只能匹配乙個位置或字元集合中的乙個字元,但是如果要匹配的字元集合沒有與之相對應的元字元時,則需要自定義匹配的字元集合。此時可以使用字元類解決這個問題。字元類是乙個字元集合,如果該字元集合中的任何乙個字元被匹配,則它就會找到該匹配項。

字元類是正規表示式中的「迷你」語言,可以在方括號""

中定義。例如:

[012345]

匹配數字

0,1,2,3,4,5

中的任何乙個。

[jj]ack

匹配字串「

jack」

或者「jack」

。然而,正規表示式

[0123456789]

的書寫非常不方便。因此,正規表示式引入連線符「

-」定義字元的範圍。例如:正規表示式

[0-9]

等價於正規表示式

[0123456789]

。3. 限定符

正規表示式的元字元一次只能匹配乙個位置或乙個字元,如果要匹配零個、乙個或多個字元時,則需要使用限定符。限定符用於指定允許特定字元或字符集自身重複出現的次數。常用限定符的說明如表

2.11

所示。字元

描述例項

重複n次

'o' 不能匹配 "bob" 中的 'o',但是能匹配 "food" 中的兩個 。

至少重複n次

'o' 不能匹配 "bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等價於 'o+'。'o' 則等價於 'o*'。

重複至少n次,最多m次

"o" 將匹配 "fooooood" 中的前三個 o。'o' 等價於 'o?'。

重複至少1次,等同

'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 。

重複至少0次,等同

zo* 能匹配 "z" 以及 "zoo"。 * 等價於。

當該字元緊跟在任何乙個其他限定符 (*, +, ?, , , ) 後面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜尋的字串,而預設的貪婪模式則盡可能多的匹配所搜尋的字串。

對於字串"oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。

4. 轉義字元

正規表示式定義了一些特殊的元字元,如^、

$、.等。由於這些字元在正規表示式中被解釋成其他的特定的意義,如果需要匹配這些字元,則需要使用轉義字元來解決這一問題。轉義字元為「

\」(反斜槓

),它可以取消這些字元(如

^、$、

.等)在表示式中具有的特殊意義,轉義字元說明及實例如表

2.12。字元

描述例項

有些字元被用來表示特殊的含義,但是要匹配其本身時就需要用轉義字元。

"\\"匹配"\"

"\."匹配"."

"\*"匹配"*"

"\+"匹配"+"

"\unnnn"匹配乙個4位16進製制數指定的unicode

5. 分組、「或」、以及反向引用

前面講到怎麼重複單個字元(直接在字元後面加上限定符就行了);但如果想要重複乙個字串就應該使用分組。

分組又稱為子表示式,即把乙個正規表示式的全部或部分分成乙個或多個組。其中,分組使用括號「

()」表示。分組之後,可以將括號「

()」之中的表示式看成乙個整體來處理,然後再指定這個子表示式的重複次數。例如:「

(\d\.)\d」

是乙個簡單的

ip位址匹配表示式。

「(\d\.)」

匹配三位數字加上乙個英文句號重複

3次,「

\d」匹配1到

3位的數字。

或」使用字元「

|」來表示。如果某乙個字串匹配了正規表示式中的字元「

|」的左邊或者右邊的規則,那麼該字串也匹配了該正規表示式。例如:「

0\d-\d|0\d-\d|0\d-\d」

匹配當前國內部分地區的

3種固定**號碼:一種是號碼的前

3位為區號,後

8位為本地號碼;另一種是號碼的前四位為區號,後

7位為本地號碼;最後一種是號碼的前

4位為區號,後

8位為本地號碼。其中,區號和本地號碼都使用連線符號「

-」進行連線。

反向引用:當乙個正規表示式被分組之後,每乙個組將自動被賦予乙個組號,該組號可以代表該組的表示式。其中,組號的編制規則為:從左到右,以分組的左括號「

(」為標誌,第乙個分組組號為

1,第二個分組的組號為

2,以此類推。反向引用提供了查詢重複字元組的方便方法。它可被認為是再次匹配同乙個字串的快捷指令。反向引用可以使用數字命名的組號,語法為:

\number

,也可以使用指定命名的組號,語法為:\k<

name

>。例如:表示式「

('|")(.*?)(\1)」

在匹配「

'hello',"world"」

時,首先匹配到的內容是:「

'hello'」

。再次匹配下乙個時,可以匹配到「

"world"」

2. regex tester用來測試正規表示式

regex tester是乙個簡單的用來測試正規表示式的工具,是開源的。

乙個正規表示式的測試工具

寫這個的初衷是因為專案中要為struts的html標籤加上styleid屬性,其屬性值一般與property屬性值相同。由於頁面很多手工修改很可能會出差錯工作量也很大,雖然這項工作不是由我來做,但是我建議可以用正規表示式替換來做,可以簡單很多。寫正規表示式的任何就落在我的頭上了,這個正規表示式不會很...

正規表示式工具

python類庫31 正規表示式匹配例項 一 regex match tracer 1 不能是某些字元中之一 用來表示匹配多個字元之一。與相反,表示匹配與多個字元中的任乙個都不匹配。下圖中,h是第乙個與abcd都不匹配的字元。2 匹配多個字串中的2個或者乙個匹配2次 用來表示多個字串中的乙個。用來表...

正規表示式 ditto工具

一 正規表示式 1 正規表示式 是乙個查詢 搜尋 替換文字的一種格式語言。2 匯入re模組 import re 系統自帶模組,無需安裝 3 模式字串 模子 4 常用方法 4.1 match方法 match方法是從頭開始匹配的,如果匹配不上,那麼返回none 示例src str pwd 123456 ...