正則表達(dá)不再靠control+v

1. 前言

  • 以前每次需要正則的時(shí)候總是去control+c&v,后來有次遇到大牛寫邏輯業(yè)務(wù)的時(shí)候直接用正則處理一些判斷,覺得:嗯!很cool,需要去了解下!!
  • 看完之后,基本語法了解了之后還是要多用,多嘗試,才能把這個(gè)技能寫的越來越溜,才能把這個(gè)逼裝好

2. 準(zhǔn)備

  • 首先先怎么要看幾篇文章吧,主要看了小松哥的文章和語法介紹

    系統(tǒng)地學(xué)習(xí)正則表達(dá)式(一):基礎(chǔ)篇
    正則表達(dá)式 - 語法

  • 工具:Regextor:可以校驗(yàn)?zāi)銓懙牡恼齽t表達(dá)式的正確性的APP,APPStore上6元,當(dāng)然有時(shí)間可以自己找找破解版
    Regextor.png
  • 正則表達(dá)式就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,用來表達(dá)對(duì)字符串的一種過濾邏輯,畫下重點(diǎn):規(guī)則字符串+過濾匹配

3. 字符&字符集的匹配

3.1 精確匹配某一個(gè)字符
  • 使用[]包裹的字符即是需要特殊匹配的字符
  • 默認(rèn)是會(huì)區(qū)分大小寫


    精確某一個(gè)字符.png

3.2 匹配任意字符

  • 使用.來表示一個(gè)任意字符, 使用..來表示兩個(gè)任意字符,以此類

    匹配一個(gè)任意字符.png

    匹配兩個(gè)任意字符.png

  • 解釋:

    c.t:會(huì)匹配以c開頭,以t結(jié)尾,中間為任意一個(gè)字符的字符串
    c..t會(huì)匹配以c開頭,以t結(jié)尾,中間為任兩個(gè)字符的字符串

3.3 匹配特定字符集

  • 使用[xxx]包裹的內(nèi)容表示匹配特定字符集中中的一個(gè)字符

    匹配特定字符集.png

  • 解釋:

    [abcd]會(huì)匹配a or b or c or d。所以c[abcd]t會(huì)匹配" cat "和" cbt "而不會(huì)匹配" cet "

3.4 匹配特定字符集區(qū)間

  • [x-x]表示匹配一個(gè)特定的區(qū)間
  • 常用的字符集區(qū)間

    [a-z]:匹配所有小寫字母區(qū)間
    [A-Z]:匹配所有大寫字母區(qū)間
    [0-9]:匹配所有數(shù)字區(qū)間
    [A-z]: 匹配從 ASCIIA到ASCIIz的所有字符(不僅僅匹配所有字母,還匹配在 ASCII 表中 A 到 z 中的字符,如 [ 和 ^ 等)
    [A-Za-z0-9] :匹配所有的大小寫字母和數(shù)字

匹配字符集.png

3.5 非字符集的匹配

  • 使用場(chǎng)景:需要排除一組不需要匹配的字符集
  • ^是將字符集合中的所有字符都取消匹配
  • ^要寫扎起字符集[]內(nèi)
非字符集的匹配.png
  • 解釋:

    [^a-z] 匹配所有不是小寫字母的字符

4. 元字符

4.1 轉(zhuǎn)義字符及補(bǔ)充

  • 正則中的元字符.都需要加上\轉(zhuǎn)義
  • 需要匹配\則需要使用\\or\\\來實(shí)現(xiàn)
    \轉(zhuǎn)義字符的補(bǔ)充.png
\轉(zhuǎn)義字符的補(bǔ)充2.png

4.2 常用元字符

元字符 描述
[\b] 退格符
\f 換頁符
\n 換行
\r 回車
\t 制表符
\v 垂直制表符
\d 任何數(shù)字 (同 [0-9])
\D 任何非數(shù)字 (同 [^0-9])
\w 所有的文字?jǐn)?shù)字式字符:大小寫字母、數(shù)字和下劃線 (同 [a-zA-Z0-9_])
\W (同 [^a-zA-Z0-9_])
\s 所有的空白字符 (同 [\f\n\r\t\v])
\S 所有的非空白字符 (同 [^\f\n\r\t\v])
原字符的使用1.png
原字符的使用2.png

5. 匹配次數(shù)&多次匹配的使用

5.1 "1+"次匹配(一次以上匹配)

  • +表示匹配一個(gè)或者多個(gè)字符。例如,a將匹配"a",而a+則匹配一個(gè)或者多個(gè)"a"
  • 當(dāng)在字符集合上使用+的時(shí)候,需要將+符號(hào)放在集合外面
一次以上的匹配.png
字符集一次以上的匹配.png

5.2 "0+"次匹配(0次以上匹配)

  • 匹配零個(gè)或更多字符的時(shí)候,可以使用*元字符
    0次以上匹配.png
0次以上字符集匹配.png

5.3 0or1次匹配(匹配0個(gè)或者1個(gè)字符)

  • ?匹配零個(gè)或者一個(gè)字符。所以:?非常適合于在文本中匹配一個(gè)可選的字符

5.4 匹配次數(shù)-精確匹配次數(shù)

  • 指定匹配的次數(shù)。次數(shù)可以在“ { ”和“ } ”之間指定,表示在{}之前的字符執(zhí)行幾次匹配
    指定次數(shù)匹配.png

5.5 匹配次數(shù)-至少匹配次數(shù)

  • 至少匹配次數(shù):只指定匹配次數(shù)的最小值。eg:{2,}意味著匹配至少兩次
  • 次數(shù)區(qū)間匹配:eg:{2,3}意味著最少匹配 2次,最多匹配3次
  • ?和{0,1}的功能是一樣的,+和 {1,}的作用是一樣的
    至少區(qū)間匹配次數(shù).png
至少匹配次數(shù).png

6. 貪婪匹配

  • 先看個(gè)??,但是匹配結(jié)果并不是我們想要的結(jié)果


    貪婪匹配.png
  • 為什么沒有像預(yù)期匹配兩個(gè)cat?
    • 這是因?yàn)?code>*和+都是貪婪匹配。也就是說,正則表達(dá)式總是尋找最大的匹配,而不是最小的,設(shè)計(jì)如此,我覺得的就像優(yōu)先級(jí)一樣,貪婪匹配的優(yōu)先級(jí)最低,匹配程度最廣
    • 貪婪匹配的時(shí)候就要使用這些量詞的非貪婪匹配(匹配盡可能少的字符).非貪婪量詞是在量詞后面加上?
貪婪量詞 非貪婪量詞
* *?
+ +?
{n,} {n,}?
非貪婪量詞.png

7. 匹配邊界

  • 字符串邊界匹配的元字符是^$分別用于字符串的開始和結(jié)束
  • 注意^如果位于集合開始處的話,則表示否定;如果在集合外面,則將匹配字符串的開始位置
  • ??????:

    [^a-z] : 表示匹配非小寫字符
    ^[a-z]: 表示匹配字符串的開始位置,第一個(gè)字符匹配小寫字符

匹配邊界(開始).png
匹配邊界(結(jié)束).png
  • 綜合實(shí)例,實(shí)際開發(fā)中很多這樣的需求,以xx開頭,以xx結(jié)尾的字符串校驗(yàn),或者字符串中不允許有其它字符等等
    綜合例子.png
綜合例子錯(cuò)誤.png

8. 實(shí)戰(zhàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,560評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評(píng)論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評(píng)論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,706評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容