正則表達(dá)式學(xué)習(xí)(上)

學(xué)習(xí)資料:

哈哈,購買鏈接,以后做書托 :)

1. 開始,零碎知識(shí)點(diǎn)

  • 配合書練習(xí)的網(wǎng)站:Regex Pal

  • 匹配任意字符

. 點(diǎn):英文句號(hào),一個(gè)通配符,可以匹配任意字符,但一些特殊情況下不能匹配行起始符,例如,U+000A,也可以匹配%或者|


1.1 捕獲分組和向后引用

捕獲分組,向后引用
  1. (\d):匹配第一個(gè)數(shù)字7,并將其捕獲
  2. \d:匹配第二個(gè)數(shù)字0,但沒有對(duì)其捕獲
  3. \1:對(duì)捕獲的數(shù)字進(jìn)行方向引用,數(shù)字7

將一個(gè)目標(biāo)用()括起來,就創(chuàng)建捕獲分組,\1則表示引用


1.2 使用量詞

量詞
  1. (:左圓括號(hào),捕獲分組的起始符
  2. \\: 反斜杠,字符組簡(jiǎn)寫式的起始符,對(duì)之后的字符進(jìn)行轉(zhuǎn)義
  3. d:字符d,字符組的簡(jiǎn)寫式的結(jié)束符,d,匹配[0-9]內(nèi)任意數(shù)字
  4. {:左花括號(hào),量詞起始符
  5. 3:數(shù)字3,匹配目標(biāo)字符個(gè)數(shù)的最小數(shù)量
  6. ,:逗號(hào),分隔作用,這里分隔開不同的數(shù)量
  7. }:右花括號(hào),量詞結(jié)束符
  8. [:左方括號(hào),字符組的起始符
  9. .:點(diǎn)號(hào),匹配點(diǎn)號(hào)本身
  10. -:連接符,匹配本身
  11. ]:右方括號(hào),字符組結(jié)束符
  12. ?:問號(hào),表示量詞,零個(gè)或者1個(gè)
  13. ):右圓括號(hào),捕獲分組的結(jié)束符
  14. +:加號(hào),表示量詞,一個(gè)或者多個(gè)

整個(gè)表達(dá)式含義:括號(hào)里的模式出現(xiàn)一次或者多次,括號(hào)里的規(guī)則是匹配三位數(shù)字或者四位數(shù)字,后面跟一個(gè)點(diǎn)號(hào)或者連字符

花括號(hào)包括的數(shù)字表示待查找的目標(biāo)出現(xiàn)的次數(shù)?;ɡㄌ?hào)是一種量詞,本身用做元字符

問號(hào),是另一種量詞,在上面的表達(dá)式中表示連字符是可選的,也就是說連字符-可以出現(xiàn)一次,也可以一次都不出現(xiàn)

*星號(hào),零個(gè)或者多個(gè)

注意:上面的表達(dá)式雖然匹配了電話字符串,但并不完全正確,因?yàn)橹皇瞧ヅ淞?位或者4位數(shù)字,而不管是否符合電話號(hào)碼的格式

改進(jìn):

(\d{3}[.-]?){2}\d{4}

改進(jìn)后的含義:連續(xù)兩個(gè)無括號(hào)3位數(shù)字后,每個(gè)3位數(shù)后面可以有連字符也可以沒有,最后一個(gè)4位數(shù)字


1.3 括選文字符

無括號(hào)區(qū)號(hào)
有括號(hào)區(qū)號(hào)

上面一個(gè)表達(dá)式,可以匹配兩種形式的電話號(hào)碼字符串,開始的3位數(shù)區(qū)號(hào),可以帶括號(hào),也可以不帶括號(hào)

  1. 開頭的脫字符^或者中間位置的^,表示匹配出現(xiàn)在一行 起始位置的目標(biāo)字符
  2. (:,捕獲分組起始符
  3. \(:,表示括號(hào)(字符本身,\作為轉(zhuǎn)義字符,(本身有捕獲分組的起始符的含義,需要轉(zhuǎn)義字符
  4. d{3}:,匹配3位數(shù)字
  5. \):,表示)自身,與第3條同理
  6. ** |:**,表示選擇,可以從多個(gè)選項(xiàng)中選擇一個(gè)。本例中就是匹配一個(gè)帶括號(hào)或者不帶擴(kuò)號(hào)的區(qū)號(hào)
  7. 脫字符^:,匹配行起始位置
  8. ** \d{3}:**,匹配3位數(shù)字
  9. [.-]?:,匹配一個(gè)可選的.點(diǎn)號(hào)或者-連字符
  10. ):,右圓括號(hào),捕獲分組結(jié)束符
  11. ?:,表示之前的(\(\d{3}\)|^\d{3}[.-]?)整個(gè)分組,都是一個(gè)可選項(xiàng),可有可無
  12. \d{3}:,匹配3位數(shù)字
  13. [.-]?:,匹配一個(gè)可選的.點(diǎn)號(hào)或者-連字符
  14. \d{4}:,匹配4位數(shù)字
  15. $:,匹配行結(jié)束位置

以上正則表達(dá)式中的捕獲分組并不是必需的。分組是必要的,但是捕獲不需要。更好的方法是使用非捕獲分組


2. 簡(jiǎn)單的模式匹配

  • 配合學(xué)習(xí)的網(wǎng)站:RegExr
  • 配合學(xué)習(xí)的示例文本:rime-intro.txt

2.1 零碎

  • \d:絕大多數(shù)情況下,都可以用來匹配阿拉伯?dāng)?shù)字
  • [0-9]:匹配數(shù)字,比\d更靈活,例如,[1-3],只匹配1,2,3這三個(gè)數(shù)字
  • \D:匹配非數(shù)字字符,包括空格、標(biāo)點(diǎn)符號(hào)(引號(hào)、連字符、反斜杠、方括號(hào))等字符;[^0-9],[^\d],同作用
  • \w:匹配字母,數(shù)字,下劃線,在匹配英文字符組時(shí),[_a-zA-Z0-9],同作用
  • \W:匹配空格、標(biāo)點(diǎn),其他非字母字符,非數(shù)字字符(包括中文),[^_a-zA-Z0-9],同作用,簡(jiǎn)寫式就是[^\w]

2.2 匹配空白字符

\s匹配空白符
  • \s:匹配空白字符,[ \t\n\r] ,間括號(hào)內(nèi)開始有空格,同作用

可以匹配:

  1. 空格
  2. 制表符\t
  3. 換行符\n
  4. 回車符\r
  • \S:匹配非空白字符,包含中文字符,[^ \t\n\r],同作用

2.3 匹配任意字符

去掉global全局模式,用來得到匹配文本中第一個(gè)符合匹配項(xiàng)

匹配 THE RIME

.點(diǎn)號(hào)在絕大多數(shù)情況下,都可以匹配除了行結(jié)束符外的任意字符

8個(gè)點(diǎn),可以用.{8}來代替


特執(zhí)性匹配ANCYENT

這個(gè)表達(dá)性具有很強(qiáng)的 特指性specificity,只要是A*****T這樣形式的單詞就符合條件

  1. \b:簡(jiǎn)寫式匹配單詞邊界,不消耗任何的字符
  2. A,T:限定單詞首尾字母
  3. .{5}:匹配任意5個(gè)字符
  4. \b:結(jié)束邊界

匹配換行符前的字符

.*匹配零個(gè)或者多個(gè)字符,在取消global模式下,匹配換行符前的字符,也就是只匹配第一行的字符,.+[^\n]或者[^\n\r],同作用。在global模式下,.+[^\n]或者[^\n\r]則匹配全部的字符

若發(fā)現(xiàn)不正常匹配的,將文本時(shí)的格式整理整理,刪除文本中間的復(fù)制時(shí),帶的多余無用的回車符


3. 邊界

斷言標(biāo)記邊界,但并不消耗字符,字符并不會(huì)返回到結(jié)果中。斷言也被稱為零度寬斷言zero-width assertion。零度寬斷言不匹配字符,而是匹配字符串中的位置。其中,^$也叫做錨位符anchor

本章節(jié)主要學(xué)習(xí):

  • 行或者字符串的起始和結(jié)束位置
  • 單詞的邊界(兩種)

3.1 行的起始和結(jié)束

脫字符^:匹配行或者字符的起始。根據(jù)上下文,^會(huì)匹配行或者字符串的起始位置,也可以匹配整個(gè)文檔的起始位置

$匹配行或者字符串結(jié)束位置

multiline模式:多行,勾選后,整個(gè)目標(biāo)文件被視為一個(gè)字符串

匹配How開頭Country結(jié)束的字符串

^How.*Country\.$:匹配How開頭的整行。\反斜杠的是做轉(zhuǎn)義字符,對(duì).點(diǎn)號(hào)進(jìn)行轉(zhuǎn)義,點(diǎn)號(hào)被解釋為字面值,也就是點(diǎn)號(hào)本身,而不是匹配任意字符

如果不勾選mutiline模式,則不能匹配到圖中的高亮部分,表達(dá)式無效


3.2 單詞邊界與非單詞邊界

匹配THE

\bTHE\b:在勾選global模式下,第一行兩個(gè)THE都會(huì)匹配

就像^$一樣,\b是個(gè)零度寬斷言,表面上會(huì)匹配空格或者是行起始,而實(shí)際上它匹配的是個(gè)零寬度的不存在的東西。第2個(gè)THE的兩邊的空格并沒有標(biāo)亮,并不會(huì)被匹配到

讀了2遍,也不是很明白


匹配單詞首尾外位置的e

\B:非單詞邊界,匹配單詞首尾之外位置,例如單詞或者字符串中間位置出現(xiàn)的字母或數(shù)字

圖中有個(gè)很典型的便是倒數(shù)第2行的eye,沒有高亮


4. 最后

哈哈,單身狗,平安夜,學(xué)習(xí)知識(shí)

正則的知識(shí)點(diǎn),好零碎,需要多看多練習(xí)。書一共9章,就打算一篇博客記錄3章學(xué)習(xí)的知識(shí)點(diǎn)

本人很菜,有錯(cuò)誤請(qǐng)指出

共勉 :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容