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

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

-
(:左圓括號,捕獲分組的起始符 -
\\: 反斜杠,字符組簡寫式的起始符,對之后的字符進(jìn)行轉(zhuǎn)義 -
d:字符d,字符組的簡寫式的結(jié)束符,d,匹配[0-9]內(nèi)任意數(shù)字 -
{:左花括號,量詞起始符 -
3:數(shù)字3,匹配目標(biāo)字符個數(shù)的最小數(shù)量 -
,:逗號,分隔作用,這里分隔開不同的數(shù)量 -
}:右花括號,量詞結(jié)束符 -
[:左方括號,字符組的起始符 -
.:點號,匹配點號本身 -
-:連接符,匹配本身 -
]:右方括號,字符組結(jié)束符 -
?:問號,表示量詞,零個或者1個 -
):右圓括號,捕獲分組的結(jié)束符 -
+:加號,表示量詞,一個或者多個
整個表達(dá)式含義:括號里的模式出現(xiàn)一次或者多次,括號里的規(guī)則是匹配三位數(shù)字或者四位數(shù)字,后面跟一個點號或者連字符
花括號包括的數(shù)字表示待查找的目標(biāo)出現(xiàn)的次數(shù)?;ɡㄌ柺且环N量詞,本身用做元字符
問號,是另一種量詞,在上面的表達(dá)式中表示連字符是可選的,也就是說連字符-可以出現(xiàn)一次,也可以一次都不出現(xiàn)
*星號,零個或者多個
注意:上面的表達(dá)式雖然匹配了電話字符串,但并不完全正確,因為只是匹配了3位或者4位數(shù)字,而不管是否符合電話號碼的格式
改進(jìn):
(\d{3}[.-]?){2}\d{4}
改進(jìn)后的含義:連續(xù)兩個無括號3位數(shù)字后,每個3位數(shù)后面可以有連字符也可以沒有,最后一個4位數(shù)字
1.3 括選文字符


上面一個表達(dá)式,可以匹配兩種形式的電話號碼字符串,開始的3位數(shù)區(qū)號,可以帶括號,也可以不帶括號
- 開頭的脫字符
^或者中間位置的^,表示匹配出現(xiàn)在一行 起始位置的目標(biāo)字符 -
(:,捕獲分組起始符 -
\(:,表示括號(字符本身,\作為轉(zhuǎn)義字符,(本身有捕獲分組的起始符的含義,需要轉(zhuǎn)義字符 -
d{3}:,匹配3位數(shù)字 -
\):,表示)自身,與第3條同理 - **
|:**,表示選擇,可以從多個選項中選擇一個。本例中就是匹配一個帶括號或者不帶擴(kuò)號的區(qū)號 - 脫字符
^:,匹配行起始位置 - **
\d{3}:**,匹配3位數(shù)字 -
[.-]?:,匹配一個可選的.點號或者-連字符 -
):,右圓括號,捕獲分組結(jié)束符 -
?:,表示之前的(\(\d{3}\)|^\d{3}[.-]?)整個分組,都是一個可選項,可有可無 -
\d{3}:,匹配3位數(shù)字 -
[.-]?:,匹配一個可選的.點號或者-連字符 -
\d{4}:,匹配4位數(shù)字 -
$:,匹配行結(jié)束位置
以上正則表達(dá)式中的捕獲分組并不是必需的。分組是必要的,但是捕獲不需要。更好的方法是使用非捕獲分組
2. 簡單的模式匹配
- 配合學(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這三個數(shù)字 -
\D:匹配非數(shù)字字符,包括空格、標(biāo)點符號(引號、連字符、反斜杠、方括號)等字符;[^0-9],[^\d],同作用 -
\w:匹配字母,數(shù)字,下劃線,在匹配英文字符組時,[_a-zA-Z0-9],同作用 -
\W:匹配空格、標(biāo)點,其他非字母字符,非數(shù)字字符(包括中文),[^_a-zA-Z0-9],同作用,簡寫式就是[^\w]
2.2 匹配空白字符

-
\s:匹配空白字符,[ \t\n\r],間括號內(nèi)開始有空格,同作用
可以匹配:
- 空格
- 制表符
\t - 換行符
\n - 回車符
\r
-
\S:匹配非空白字符,包含中文字符,[^ \t\n\r],同作用
2.3 匹配任意字符
去掉global全局模式,用來得到匹配文本中第一個符合匹配項

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

這個表達(dá)性具有很強(qiáng)的 特指性specificity,只要是A*****T這樣形式的單詞就符合條件
-
\b:簡寫式匹配單詞邊界,不消耗任何的字符 -
A,T:限定單詞首尾字母 -
.{5}:匹配任意5個字符 -
\b:結(jié)束邊界

.*:匹配零個或者多個字符,在取消global模式下,匹配換行符前的字符,也就是只匹配第一行的字符,.+,[^\n]或者[^\n\r],同作用。在global模式下,.+,[^\n]或者[^\n\r]則匹配全部的字符
若發(fā)現(xiàn)不正常匹配的,將文本時的格式整理整理,刪除文本中間的復(fù)制時,帶的多余無用的回車符
3. 邊界
斷言標(biāo)記邊界,但并不消耗字符,字符并不會返回到結(jié)果中。斷言也被稱為零度寬斷言zero-width assertion。零度寬斷言不匹配字符,而是匹配字符串中的位置。其中,^和$也叫做錨位符anchor
本章節(jié)主要學(xué)習(xí):
- 行或者字符串的起始和結(jié)束位置
- 單詞的邊界(兩種)
3.1 行的起始和結(jié)束
脫字符^:匹配行或者字符的起始。根據(jù)上下文,^會匹配行或者字符串的起始位置,也可以匹配整個文檔的起始位置
$:匹配行或者字符串結(jié)束位置
multiline模式:多行,勾選后,整個目標(biāo)文件被視為一個字符串

^How.*Country\.$:匹配How開頭的整行。\反斜杠的是做轉(zhuǎn)義字符,對.點號進(jìn)行轉(zhuǎn)義,點號被解釋為字面值,也就是點號本身,而不是匹配任意字符
如果不勾選mutiline模式,則不能匹配到圖中的高亮部分,表達(dá)式無效
3.2 單詞邊界與非單詞邊界

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

\B:非單詞邊界,匹配單詞首尾之外位置,例如單詞或者字符串中間位置出現(xiàn)的字母或數(shù)字
圖中有個很典型的便是倒數(shù)第2行的eye,沒有高亮
4. 最后
哈哈,單身狗,平安夜,學(xué)習(xí)知識
正則的知識點,好零碎,需要多看多練習(xí)。書一共9章,就打算一篇博客記錄3章學(xué)習(xí)的知識點
本人很菜,有錯誤請指出
共勉 :)