正則表達式語法「正則條件概念的應用」

前言

正則表達式又稱Regex,是文本處理領域中非常常見的概念,這個概念方法在各個應用領域和編程語言下都有極大的運用價值,是每個編程人員都應該熟悉的字符串過濾技巧。

在學習正則表達式的過程中,相信很多小夥伴都有這樣的困擾:網上沒有系統的正則表達式的學習材料。

今天老K就給大家整理了一篇文章,詳細介紹了正則表達式的各種概念。

我們就以:

正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。

作為示例文本,開始介紹吧。


一、【字符類】匹配

  1. 通過.可以匹配除換行符以外的所有字符,例如:
    表示所有字符:
    /./g
    匹配結果:
    正則表達式又稱Regexr,可以用普通字符(a~z26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
  2. 通過w、d、s分別用來匹配羅馬字符、數字、空格,例:
    1. 表示所有羅馬字符
      /w/g
      匹配結果
      正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
    2. 表示所有數字:
      /d/g
      匹配結果:
      正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
    3. 表示所有空格:
      /s/g
      匹配結果:
      正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。

3. 通過W、D、S用來匹配非羅馬字符、非數字、非空格的字符串,例:

  1. 表示所有非羅馬字符:
    /W/g
    匹配結果:
    正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
  2. 表示所有非數字:
    /D/g
    匹配結果:
    正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
  3. 表示所有非空格:
    /s/g
    匹配結果:
    正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。

4. 用[abc]的方式設定集合,匹配集合中的字符,例:
表示”普/通/字/符”中任意字符:
/[普通字符]/g
匹配結果:
正則表達式又稱Regexr,可以用普 通 字 符(a~z 26個英文字母)和特殊字 符(元字 符)組合表示某些特定字 符模式。

5. 用[^abc]的方式設定集合取反,匹配不在集合中的字符,例:
表示不在”普/通/和/特/殊/字/符”中的任意字符:
/[^普通和特殊字符]/g
結果:
正 則 表 達 式 又 稱 R e g e x r , 可 以 用普通字符( a ~ z 2 6 個 英 文字母 ) 和特殊字符( 元字符) 組 合 表 示 某 些特定字符模 式 。

6. 用[a-g]的方式表示區間,選擇從a到g的字符,例:
表示在a到g的字符:
/[a-g]/g
結果:
正則表達式又稱Re g exr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。


二、【錨類】匹配

  1. 用^abc表示匹配字符串起始位置的字符,例:
    表示在字符串開頭的“正則”二字:
    /^正則/g
    匹配結果:
    正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
    說明:
    如果用/^普通/g去匹配就會匹配失敗,因為“普通”兩字不在字符串開頭
  2. 用abc$表示匹配字符串結尾位置的字符,例:
    表示在字符串結尾的”字符模式。”:
    /字符模式。$/g
    匹配結果:
    正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
    說明:
    如果”字符模式。”這幾個字符不在字符串結尾,則會匹配失敗。這裡尤其需要注意,如果語句結尾有換行符,則字符串是以換行符結尾,需要加入n才行
  3. 用b表示單詞邊界和B非單詞邊界,此處的單詞邊界以空格或換行符作為判斷邏輯,例:
    1. 用b表示在單詞邊界的數字:
      /bd/g
      匹配結果:
      正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
      說明:
      匹配文本里有2個數字,但由於6不在單詞邊界空格後面,所以沒有匹配6而匹配到了2
    2. 用B表示不在單詞邊界的數字:
      /Bd/g
      匹配結果:
      正則表達式又稱Regexr,可以用普通字符(a~z 26個英文字母)和特殊字符(元字符)組合表示某些特定字符模式。
      說明:
      匹配文本里有2個數字,但由於2在單詞邊界空格後面,所以沒有匹配2而匹配到了6

三、轉義字符

由於匹配需要,很多時候會用到一些+字符的組合,表示特殊含義而非其字符本身的含義。由於這種表示方式轉換了字符本身的含義,所以被稱為轉義字符。

  1. 轉義特殊字符:
  • .:由於.在正則中表示所有字符,所以用.表示字符”.”本身;
  • *:由於*在正則中表示數量詞,所以用*表示字符”*”本身;
  • \:由於在正則中表示轉義模式,所以用\表示字符””本身;

2. 字母類轉義字符:

  • t:此處用t表示製表空格,而非字符”t”;
  • n:此處用n表示換行符,而非字符”n”;
  • r:此處用r表示退格鍵操作,而非字符”r”;

四、字符組

有時候需要根據條件檢索特定字符,如在電子郵箱中找到用戶名,就需要先從文本中用正則找到電子郵箱的字段,再在電子郵箱的字段里用正則找到用戶名,這樣會讓簡單的工作變得複雜。
字符組讓這個工作變得容易起來。這裡,我們用:

hahaha haa hah!

作為例句,了解一下字符組的使用吧:

  1. 用圓括號表示字符組,如(abc),見下例:
    /(ha)+/g
    匹配結果:
    hahaha haa hah!
  2. 用1表示正則表達式里的第一個字符組,2表示正則表達式里第二個字符組,3、4依次類推:
    (w)a1
    匹配結果:
    hah dad bad dab gag gab
    說明:
    此例中,當(w)匹配的結果為字符h,則1就表示h。1的匹配結果需要參考第一個字符組,即(w)的結果。

五、相鄰判斷

匹配例句:

1pt 2px 3em 4px

1.可以用(?=ABC)、(?!ABC)的表達式,表示前瞻判斷:

  1. 正向前瞻判斷,示例如下:
    表示在字符”px”前的數字:
    /d(?=px)/g
    匹配結果:
    1pt 2px 3em 4px
    說明:
    此處的(?=px)表示一個佔位符,而非具體的字符
  2. 負向前瞻判斷,示例如下:
    表示不在字符”px”前的數字
    /d(?!px)/g
    匹配結果:
    1pt 2px 3em 4px
    說明:
    此處的(?!px)表示一個佔位符,而非具體的字符

2.可以用(?<=ABC)、(?<!ABC)的表達式,表示回顧判斷:

  1. 正向回顧判斷,示例如下:
    表示在字符”p”後的羅馬字符:
    /(?<=p)w/g
    匹配結果:
    1pt 2px 3em 4px
  2. 負向回顧判斷,示例如下:
    表示不在字符”p”後的羅馬字符:
    /(?<!p)w/g
    匹配結果:
    1pt 2px 3em 4px

六、數量詞

匹配例句:

b be bee beer beers beeeee

  1. 用數字表示的數量詞:
    1. {n}表示匹配n個字符:
      /e{2}/g
      匹配結果:
      b be bee beer beers beeeee
    2. {n,}表示匹配n個以上字符:
      /e{2,}/g
      匹配結果:
      b be bee beer beers beeeee
    3. {n,m}表示匹配n到m個字符
      /e{2,3}/g
      匹配結果:
      b be bee beer beers beee ee

2. 用特殊符號*、+、?表示的數量詞:

  1. *表示0個或多個字符:
    /e*/g
    匹配結果:
    b be bee beer beers beeeee
  2. +表示1個或多個字符:
    /e+/g
    匹配結果
    b be bee beer beers beeeee
  3. ?表示0個或1個字符:
    /b?/g
    匹配結果:
    b be bee beer beers beeeee
  4. 關於*和+差別的說明:
    有些小夥伴可能會困惑在匹配時*和+都是匹配多個,但匹配0個和1個的差別是什麼?有這個問題的小夥伴可以看下例是如何匹配字符串abc:
    /a.*bc/g能匹配上述字符串;
    /a.+bc/g不能匹配上述字符串,因為這個表達式不允許a和b沒有字符;

七、貪婪模式

  1. .+表示用貪婪模式進行匹配:
    /bw+/g
    匹配結果:
    b be bee beer beers beeeee
  2. .+?表示用非貪婪模式(懶惰模式)進行匹配
    /bw+?/g
    匹配結果:
    b be bee beer beers beeeee
  3. 貪婪模式和懶惰模式:
    貪婪模式就是在滿足表達式的前提下,匹配儘可能多的字符;
    懶惰模式,又稱非貪婪模式,表示在滿足表達式的前提下,匹配儘可能少的字符。

總結

正則表達式是一項非常實用的技術,是每一個程序員都應該掌握的技能。
老K將所有的知識點匯總成了圖表:

正則表達式全知識點,一篇文章說清楚
正則表達式全知識點,一篇文章說清楚
正則表達式全知識點,一篇文章說清楚

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275407.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:21
下一篇 2024-12-17 14:21

相關推薦

發表回復

登錄後才能評論