學(xué)習(xí)資料:
哈哈,購買鏈接,以后做書托 :)
1. 開始,零碎知識(shí)點(diǎn)
配合書練習(xí)的網(wǎng)站:Regex Pal
匹配任意字符
. 點(diǎn):英文句號(hào),一個(gè)通配符,可以匹配任意字符,但一些特殊情況下不能匹配行起始符,例如,U+000A,也可以匹配%或者|
1.1 捕獲分組和向后引用

-
(\d):匹配第一個(gè)數(shù)字7,并將其捕獲 -
\d:匹配第二個(gè)數(shù)字0,但沒有對(duì)其捕獲 -
\1:對(duì)捕獲的數(shù)字進(jìn)行方向引用,數(shù)字7
將一個(gè)目標(biāo)用()括起來,就創(chuàng)建捕獲分組,\1則表示引用
1.2 使用量詞

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


上面一個(gè)表達(dá)式,可以匹配兩種形式的電話號(hào)碼字符串,開始的3位數(shù)區(qū)號(hào),可以帶括號(hào),也可以不帶括號(hào)
- 開頭的脫字符
^或者中間位置的^,表示匹配出現(xiàn)在一行 起始位置的目標(biāo)字符 -
(:,捕獲分組起始符 -
\(:,表示括號(hào)(字符本身,\作為轉(zhuǎn)義字符,(本身有捕獲分組的起始符的含義,需要轉(zhuǎn)義字符 -
d{3}:,匹配3位數(shù)字 -
\):,表示)自身,與第3條同理 - **
|:**,表示選擇,可以從多個(gè)選項(xiàng)中選擇一個(gè)。本例中就是匹配一個(gè)帶括號(hào)或者不帶擴(kuò)號(hào)的區(qū)號(hào) - 脫字符
^:,匹配行起始位置 - **
\d{3}:**,匹配3位數(shù)字 -
[.-]?:,匹配一個(gè)可選的.點(diǎn)號(hào)或者-連字符 -
):,右圓括號(hào),捕獲分組結(jié)束符 -
?:,表示之前的(\(\d{3}\)|^\d{3}[.-]?)整個(gè)分組,都是一個(gè)可選項(xiàng),可有可無 -
\d{3}:,匹配3位數(shù)字 -
[.-]?:,匹配一個(gè)可選的.點(diǎn)號(hào)或者-連字符 -
\d{4}:,匹配4位數(shù)字 -
$:,匹配行結(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:匹配空白字符,[ \t\n\r],間括號(hào)內(nèi)開始有空格,同作用
可以匹配:
- 空格
- 制表符
\t - 換行符
\n - 回車符
\r
-
\S:匹配非空白字符,包含中文字符,[^ \t\n\r],同作用
2.3 匹配任意字符
去掉global全局模式,用來得到匹配文本中第一個(gè)符合匹配項(xiàng)

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

這個(gè)表達(dá)性具有很強(qiáng)的 特指性specificity,只要是A*****T這樣形式的單詞就符合條件
-
\b:簡(jiǎn)寫式匹配單詞邊界,不消耗任何的字符 -
A,T:限定單詞首尾字母 -
.{5}:匹配任意5個(gè)字符 -
\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\.$:匹配How開頭的整行。\反斜杠的是做轉(zhuǎn)義字符,對(duì).點(diǎn)號(hào)進(jìn)行轉(zhuǎn)義,點(diǎn)號(hào)被解釋為字面值,也就是點(diǎn)號(hào)本身,而不是匹配任意字符
如果不勾選mutiline模式,則不能匹配到圖中的高亮部分,表達(dá)式無效
3.2 單詞邊界與非單詞邊界

\bTHE\b:在勾選global模式下,第一行兩個(gè)THE都會(huì)匹配
就像^和$一樣,\b是個(gè)零度寬斷言,表面上會(huì)匹配空格或者是行起始,而實(shí)際上它匹配的是個(gè)零寬度的不存在的東西。第2個(gè)THE的兩邊的空格并沒有標(biāo)亮,并不會(huì)被匹配到
讀了2遍,也不是很明白

\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)指出
共勉 :)