正規表示式的一些筆記

2021-10-08 05:42:26 字數 2195 閱讀 2636

--.

除了換行符的任意字元

\d任意數字

\w任意數字、字母、下劃線

\s任意空白

\d任意非數字

\w任意非數字、字母、下劃線

\s任意非空白符 -

-\r回車符\n

換行符\f

換頁符\t

製表符\v

垂直製表符

\s任意空白符 -

-*0到多次

+1到多次

?0到1次

出現m次

出現至少m次

m到n次 -

-|或, ab | bc 表示 ab 或 bc

[…]多選一,括號中的單個元素

[a-z]

匹配a到z之間任意單元素

[^…]

取反,不包括括號中的任意單個元素

表示次數的量詞預設是貪婪模式,在貪婪模式下,會嘗試盡可能最大長度去匹配。

例子

a*

aaabb

匹配

位置匹配內容

說明match 1

0-3aaa

match 2

3-3空字串

星號(*)代表 0 到多次,匹配 0 次就是空字串

match 3

4-4空字串

match 4

5-5空字串

匹配長度盡可能小,在量詞後面加上英文的問號 (?),將貪婪模式變成非貪婪模式.

例子

a*?

aaabb

匹配

位置匹配內容

說明match 1

0-0match 2

0-1a

match 3

1-1match 4

1-2a

match 5

2-2match 6

2-3a

match 7

3-3match 8

4-4match 9

5-5類似貪婪匹配,滿足要求的情況下,盡可能長的匹配,但匹配過程不會發生回溯。具體的方法就是在量詞後面加上加號(+)。

例子1

xy+z

xyyz

xyyz

例子2

xy+yz

xyyz

如果是貪婪模式,先按最長匹配,匹配了yy,下乙個是z,z和y不匹配,則從yy回溯,吐出乙個y,剩乙個y,下乙個是y,與y匹配,接著匹配z,可以匹配到xyyz。

分組是將子表示式看成乙個整體,在後續查詢或替換中引用分組。括號在正則中可以用於分組,被括號括起來的部分「子表示式」會被儲存成乙個子組,第幾個括號就是第幾個分組。分組可通過編號或者捕獲名稱來引用。--

(正則)

捕獲分組

(?:正則)

非捕獲分組

(?p《名稱》正則)

命名分組

模式描述

例子(?i)

不區分大小寫模式

(?i)cat

(?s)

單行模式

(?s).+

(?m)

多行模式

(?m)^the|cat$

(?#comment)

注釋模式

(\w+)(?#word) \1(?#word repeat again)

通常情況下,^ 匹配整個字串的開頭,$ 匹配整個字串的結尾。多行匹配模式改變的就是 ^ 和 $ 的匹配行為。對於 ^ 和 $ 大部分實現預設不是多行匹配模式,但也有例外,比如 ruby 中預設是多行模式。

用於匹配位置,而不是文字內容本身。 -

-\b單詞邊界 -

-^匹配行的開始

$匹配行的結束

\a僅匹配整個字串的開始,不支援多行模式

\z僅匹配整個字串的結束,不支援多行模式 -

-(?<=y)x

匹配前面是y的x

(?匹配前面不是y的x

x(?=y)

匹配後面是y的x

x(?!y)

匹配後面不是y的x

一些正規表示式

要嚴格的驗證手機號碼,必須先要清楚現在已經開放了哪些數字開頭的號碼段,目前國內號碼段分配如下 移動 134 135 136 137 138 139 150 151 157 td 158 159 187 188 聯通 130 131 132 152 155 156 185 186 電信 133 153...

一些正規表示式

判斷是否是正整數if isnan paramvalue paramvalue 0 else 金額的格式判斷輸入金額的要求 整數字最多十位,小數為最多為兩位,可以無小數字 0 9 1 9 0 9 0 9 function checkmoney str 0 9 if re.test str else 手...

一些正規表示式

記錄一下 以防忘記 string hello 123 4567 world this is a regsssss res re.match w s d s d s w string 匹配到 hello 123 4567 world this 其中 代表乙個字串的開始 代表乙個字串的結尾 w 匹配字母...