開發與維運

正則表達式學習記錄

符號說明

不方便書寫的符號使用轉義符 "\" 來取消特殊語義例如^表示字符串的開始\^則表示匹配^這個符號。

通常大寫表示反義詞例如\d表示匹配數字,\D表示匹配非數字

常用匹配字符

符號 說明
. 匹配除換行外的所有字符
\w 匹配所有字母數字,等同於 [a-zA-Z0-9_]
\d 匹配數字: [0-9]
\s 匹配所有空格字符,等同於: [\t\n\f\r\p{Z}]
\f 匹配一個換頁符
\n 匹配一個換行符
\r 匹配一個回車符
\t 匹配一個製表符
\v 匹配一個垂直製表符
\p 匹配 CR/LF(等同於 \r\n),用來匹配 DOS 行終止符

字符,數字,空格字符有反義匹配即\W,\D,\S

限定符,量詞

符號 說明
* 出現0次或多次
+ 出現1次或多次
? 出現0次或1次
{n} 出現n次
{n,m} 出現n次至m次,可不寫n或m表示至少n次或至多m次

貪婪匹配

默認為貪戀匹配,即默認儘可能多的匹配

"/(.*at)/" => The fat cat sat on the mat.

惰性匹配

在量詞後加上?可將匹配模式修改為惰性匹配,儘可能少的匹配

"/(.*?at)/" => The fat cat sat on the mat.

定位符

定位符僅匹配位置並不匹配指定字符

符號 說明
^ 開始位置
$ 結束位置
\b 匹配單詞的開始或結束
\B 匹配非單詞的開始或結束

範圍

符號 說明
| 匹配左側或者右側, x|y 表示匹配x或者y,左右可以是分組
[] 括號內為匹配範圍,[avd],表示avd三個字母都可匹配
[a-z] 表示匹配連續的範圍a到z
[^a-z] 表示匹配a到z之外的任意字符

分組

符號 說明
() 括號內為子表達式,子表達式可被引用
\n n為1-9之間的數字,在正則表達式中來引用表達式中的分組,例如(a)\1,等價於aa

分組之後的表達式可在文本編輯器中使用$n來引用

其他

正則表達式修飾符

不同語言對正則表達式有不同的修飾符例如忽略大小寫,多行匹配等,js是在/表達式/修飾符 中配置。具體需要看使用語言中的實現。 js中正則表達式的標記,可組合使用,在正則表達式最後加上符號

符號 說明
g 全局匹配
i 不區分大小寫
m 多行搜索
s 允許.匹配換行符
  • 默認正則會返回第一個匹配的結果,加上全局匹配後會返回所有匹配的結果

"/.(at)/" => The fat cat sat on the mat.

"/.(at)/g" => The fat cat sat on the mat.

特殊字符匹配

符號 說明
\xXX 編號在 0 ~ 255 範圍的字符,比如:點擊測試 空格可以使用 "\x20" 表示
\uXXXX 任何字符可以使用 "\u" 再加上其編號的4位十六進制數表示,比如:點擊測試 "\u4E2D"

匹配規則,環視

符號 說明
(?:pattern) 捕獲但不單獨獲取結果
(?=pattern) 肯定查詢,僅當匹配字符串符合後綴匹配內容才判定為匹配,例如Windows(?=95|98|NT|2000)
(?<=pattern) 效果同上但放在字符串前,匹配前綴,例如 (?<=95|98|NT|2000)Windows
(?!pattern) 否定查詢,僅當匹配字符串不符合匹配後綴才判定為匹配
(?<!pattern) 效果同上但放在字符串之前,匹配前綴,例如 (?<!95|98|NT|2000)Windows

資料

  1. 將正則表達式圖形化,方便理解

https://regexper.com/

https://jex.im/regulex/

2.在線測試正則

https://regex101.com/r/AyAdgJ/1

https://regexr.com/

  1. 參考資料

https://blog.csdn.net/hello_word2/article/details/84890548

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

https://www.runoob.com/regexp/regexp-tutorial.html

http://www.regexlab.com/zh/regref.htm

https://xie.infoq.cn/article/dcc7103126233028945c67c43

https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

Leave a Reply

Your email address will not be published. Required fields are marked *