正則表達式詳細介紹

單個表示:

-1 \d 數字

-2 \D 非數字

注:大小寫就是取反的意思

-3 \w 任意一個字母或數字或下劃線
-4 \s 空白符(換行、製表符、空格)

-5 . 任意字符(除了換行符)


自定義字符集合:

[]表示匹配[]內的任意一個字符,是一個或運算,比如[123],就表示是數字1或數字2或數字3

[^]表示非運算,比如[^123],表示除了數字123的任意字符,包括空白符

[1-9],匹配數字1-9之間的任意一個字符

[^1-9a-b],匹配數字1-9和字符a-b之外的任意一個字符

注:在[]中,除了^和-以外的所有字符,都失去了特殊含義,比如.就是.,不是指任意字符了,當然\n這種還是代表換行


量詞:

-1 {n},這裏的n是一個數字,{n}表示連續出現幾次,比如\d{6},表示連續匹配了6個數字,這個只與{}前一個表達式有關,比如\d\d{6}不是匹配12個數字,是表示匹配7個數字;如果想要表示12個數字,只需要加個(),(\d\d){6}即可

-2 {m,n},m和n都是數字,表示[m,n],比如\d{3,6},匹配的是滿足連續3個-連續6個的數字的字符串,這裏的匹配默認是貪婪模式,即先看有沒有6個的,有的話返回6個,以此類推,如果想要使用非貪婪模式,即優先匹配3個連續數字的字符串,只需要在{}後加個?,\d{3,6}?即可。

-3 {m,},m是數字,表示匹配滿足至少連續m次,但是沒有{,m}這樣的寫法

-4 ? 匹配次數時0次或者1次,相當於{0,1},a\d{0,1}b等同於a\d?b

-5 + 匹配次數至少1次

-6 * 匹配次數至少0次


字符邊界:

注:字符邊界都是零寬的,即不會匹配到符號,這裏匹配的是一個位置,而非字符

-1 ^ 字符串開始的位置 ^a表示字母a開頭的位置

-2 $ 字符串結尾的位置 a$表示字母a結束的位置

-3 \b 匹配一個單詞的邊界(左邊右邊不全是\w),換句話就是,出現非數字非字符非下劃線的符號就可以匹配了

舉個例子:

字符串:test 90test test123

test\b的匹配結果是:test 90test test123,對test123的test來說,右邊出現了數字

\btest\b的匹配結果是:test 90test test123,因爲90test的test,左邊是數字,test123的右邊是數字


選擇符和分組:

-1 | 表示或,匹配滿足左邊和右邊的字符串,如\d|[a-z],表示匹配數字或者小寫字母

-2 ()表示捕獲組,將一個表達式用()括起來,就可以將這個括號視作整體

-3 \ddd,這裏的ddd是數字,\ddd表示反向引用第幾個括號的內容,舉個例子:

    [a-z]{2}表示連續2個小寫字母,([a-z]{2})\1表示將([a-z]{2})匹配到的字符串再重複一次做匹配,比如([a-z]{2})匹配到ab,那麼([a-z]{2})\1表示abab

    ([a-z]{2})([a-z])匹配到的內容是abc,那麼([a-z]{2})([a-z])\2則是abcc,([a-z]{2})([a-z])\1\2則是abcabc, ([a-z]{2})([a-z])\2\1則是abccab

總的來說,\ddd就是表示第幾個括號的位置,以左括號的位置爲準,因爲這裏捕獲組會保存到內存,在大文本處理的時候可能會佔用比較大的內存

-4 (?:) 非捕獲組,即不會保存到內存,但是和()的返回結果相同,但是不能與反向引用相結合,因爲不保存結果


預搜索(零寬斷言):

之所以所零寬,因爲這部分匹配的都是位置

-1 (?=exp) 這裏exp是表達式, 整體表示斷言自身出現的位置的後面能匹配表達式exp,舉個例子

    有如下字符串:eating fighting doing,表達式 [a-z]+(?=ing)匹配的結果是eat fight do,ing不計入匹配結果

-2 (?!=exp) 和上面相似後面不等於exp

-3 (?<=exp) 斷言自身出現的位置的前面能匹配表達式exp


發佈了38 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章