正規表示式 一

2021-10-07 08:33:35 字數 2422 閱讀 5465

1)正規表示式中的元素可以分為基礎表示式和限定符/量詞

2)所有基礎表示式預設只能匹配乙個字元,除非其後有限定符給出匹配次數

3)限定符只限定在其前面的那乙個表示式(^定位符只對其後第乙個表示式生效,而$定位符只對其前第乙個表示式生效

表示式說明a

單個字元,只匹配a(a可替換為任何非特殊字元)

a|b匹配a或b,同理a,b可替換

[abc]

匹配a或b或c,[ ]相當於三個物件及以上的或

[^abc]

匹配除abc外的所有單個字元

[a-z]

匹配a到z之間的任意乙個字元

由於一些基礎表示式較為常見,故直接使用了部分表示式來代替,如下表所示:

表示式說明

表示式說明

\d匹配乙個數字,等價於[0-9]

\d匹配乙個非數字字元,等價於[^0-9]

\w匹配字元、數字、下劃線, 等價於[a-za-z0-9_]

\w等價於[^a-za-z0-9_]

\f換頁符

\n換行符

\r回車符

\t製表符

\v垂直製表符

\s空白字元

\s非空白字元

特殊字元表示式

在表示式中還會有一些特殊的字元,如$與^兩個字元匹配的是位置(表示式除可匹配字元外,還可匹配位置,包括開頭以及及結尾這兩個位置(似乎對於字串中空白字元與非空白字元交界的位置也有對應表示式匹配???))

表示式說明

$匹配結尾位置,a$ 表示以a為結尾,如果需要匹配$本身,使用\$

^匹配開始位置,如要匹配^,如上使用\^

.匹配除換行符\n外任乙個字元,如需匹配.本身,同上

()表示乙個子表示式的開始或結束,預設情況下也可匹配到多個字元,如要匹配本身,同上

表示中括號表示式的開始或結束,注意,中括號表示式預設無限定符情況下只能匹配乙個字元,\[ 和 \] 的用法同上

{}表示限定符\量詞的開始或結束,\ 的用法同上

|邏輯或,如果不出現在()內,其作用域是整個表示式, \|同上

\將之後乙個字元變為普通或特殊字元

限定符說明

注m≥n≥0,且兩者都為整數

匹配前乙個表示式最少n次,最多m次

範圍與上類似

匹配前乙個表示式最少n次

匹配前乙個表示式n次

?匹配前乙個表示式0次或1次,等價於,本義用\?

+匹配前乙個表示式1次或多次,等價於,本義用\+

*匹配前乙個表示式0次或多次,等價於本義用\*

( )()內表示乙個子表示式,乙個整體,可用來分組和捕獲文字

1.a(b|c) 只能匹配ab或ac,而ab|c 只能匹配ab或者c;又如(abc)?表示abc只能一起出現或者一起不出現

2. (?:abc)表示找到這樣的abc一組,但並不記錄,不儲存到變數$中去;正常情況下,匹配出來的結果會隨正規表示式而進行劃分儲存,並可使用$+序號的方式來訪問使用。比如在c++中,對表示式(aa)(bb)(cc),匹配的結果只能是aabbcc,進行匹配後,$變數裡會儲存相關的值,如$0儲存整個匹配結果,$3儲存子表示式(cc)匹配結果,(注:這個序號順序是由左向右,由外向內的);而在(aa)(?:bb)(cc)情況下,也只能匹配aabbcc,但子表示式(cc)的匹配結果儲存在$2中,(?:bb)的匹配結果不儲存

事實上,正規表示式中以(?開頭的都屬於擴充套件語法,擴充套件語法除(2)中的還有很多,像(?=…)或(?!..)等等,並不是所有的語言都支援所有的擴充套件語法,因此在此就不做詳細介紹

[ ]
預設情況下式單個匹配

特殊字元在[ ]裡會是去原有的意義:

被賦予新的意義,如^在[ ]中的開始位置表示取反,在[ ]中的其他位置才表示自身,-在[ ]中的第乙個位置表示本身,在其它位置表示乙個數字或字母區間連線符

變為普通字元,如$ + ? 還有() 等[(a)]表示可匹配( 或 a 或 )

但是一些特殊字元在[ ]中也不會發生意義的變化,比如[ \n] 仍舊表示乙個換行符。除此外,一些字元,比如- ^在[ ]中要匹配時要麼放到合適位置,要麼使用\- 和 \^的形式

量詞可以分為匹配優先量詞,包括? + * 不包括

和忽略優先量詞,在上面幾個量詞後面加上?,主要有?? +? *? ?

前者使用貪婪匹配模式,在整個表示式成功的前提下,盡可能的多去匹配量詞所修飾的字元(表示式),後者採用非貪婪的模式,盡可能少的去匹配…

如對於字串abcbd

貪婪模式下,正規表示式 a[bcd]*b 的匹配結果是 abcb,[bcd]的匹配部分是bc,而非貪婪模式下正規表示式 a[bcd]*?b匹配結果是ab,[bcd]的沒有對應匹配部分

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

非負整數 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...

正規表示式 一

若你使用過windows dos下用於檔案查詢的萬用字元,也就是 和?如果你想查詢某個目錄下的所有的word文件的話,你會搜尋 doc。會被解釋成任意的字串。和萬用字元類似,正規表示式也是用來進行文字匹配的工具,只不過比萬用字元更能精確地描述你的需求。比如你可以編寫乙個正規表示式來查詢所有以0開頭,...

正規表示式一

工欲善其事,必先利其器,jq原始碼中充斥的大量的正規表示式,我準備根據李炎恢老師的正規表示式的講解,寫一篇有關正規表示式的筆記!不墨跡,直接進入正題!ecmascript 的 regexp 類 表示正規表示式 正規表示式在jq中被大量運用,主要是為了檢索字串,進行匹配 建立正規表示式 var box...