智能指針
- 一、背景
- 🎈1.1. 模式匹配
- 🎈1.2. 文本替換
- 🎈1.3. 數據驗證
- 🎈1.4. 信息提取
- 🎈1.5. 拆分字符串
- 🎈1.6. 高級搜索功能
- 二、原料
- 2.1 參考視頻
- 2.2 驗證網址
- 三、用法
- 3.1 限定符
- 3.1.1 ?
- 3.1.2 *
- 3.1.3 +
- 3.1.4 {}
- 3.1.4 ()
- 3.2 "或"運算符
- 3.3 字符類
- 3.3.1 []
- 3.3.2 ^
- 3.3 特殊字符
- 3.3.1 一般特殊
- 3.3.2 二般特殊
- 四、高級用法
- 4.1 貪婪與懶惰匹配
- 五、實例
- 5.1 匹配rgb顏色
- 5.2 匹配IPV4
- 六、總結
- 6.1 評論區總結
- 6.2 視頻總結
一、背景
正則表達式是一個非常靈活且功能強大的工具,可用于各種文本處理和數據操作任務。無論是在編程中還是在日常文本編輯中,掌握正則表達式都能顯著提高效率和準確性。正則表達式(Regular Expression,簡稱 regex or regexp) 是一種用于匹配和操作字符串的強大工具。它可以用于多種編程語言和工具中,廣泛應用于文本處理、數據驗證、信息提取等任務。以下是正則表達式的一些主要作用:
🎈1.1. 模式匹配
正則表達式可以幫助你查找特定模式的文本。例如,你可以找到所有以 “abc” 開頭的字符串,或是匹配任何包含數字的字符串。
🎈1.2. 文本替換
你可以使用正則表達式在文本中進行替換操作。例如,可以將所有的郵箱地址替換為一個統一格式,或者移除特定模式的字符串。
🎈1.3. 數據驗證
正則表達式常用于驗證輸入數據的格式,例如驗證電子郵件地址、電話號碼、日期格式等。這可以確保用戶輸入的內容符合預期格式。
🎈1.4. 信息提取
利用正則表達式可以從文本中提取特定的信息。例如,從日志文件中提取日期、事件代碼或任何特定模式的信息。
🎈1.5. 拆分字符串
使用正則表達式可以根據特定模式拆分字符串,例如,將一段文本按空格、標點符號等分割開來。
🎈1.6. 高級搜索功能
在一些文本編輯器或 IDE 中,正則表達式提供了強大的搜索功能,允許用戶使用復雜的模式來查找文本。
二、原料
2.1 參考視頻
【10分鐘快速掌握正則表達式】 https://www.bilibili.com/video/BV1da4y1p7iZ/?share_source=copy_web&vd_source=e52fceea42b773b494141fae690ef6c5
2.2 驗證網址
https://regex101.com/
三、用法
萬事俱備,我們直接切入正題
3.1 限定符
3.1.1 ?
測試實例:use a used variable name is illegal.
表達式: used?
意義表示: 字符d
這個詞出現0次或1次
3.1.2 *
測試實例:
ac
abc
abbbbbbc
adc
addddddc
表達式: ab*c
意義表示: 代表b
可以沒有也可以出現多次
3.1.3 +
測試實例:
ac
abc
abbbbbbc
adc
addddddc
表達式: ab+c
意義表示: 代表b
可出現一次以上字符
3.1.4 {}
測試實例:
abc
abbc
abbbbbbbbbc
abbbbbbc
ac
adc
addddddc
表達式: ab{2}c
意義表示: 代表b
可出現2次
表達式:
ab{2,6}c
意義表示: 代表b
可出現2次到6次字符
表達式:
ab{2,}c
意義表示: 代表b
可出現2次以上
3.1.4 ()
前面我們涉及的都是一個字符,如果我們需要匹配兩個字符,可以通過()
括起來
表達式:
a(bb){1,3}c
意義表示: 代表bb
可出現1次到3次字符
3.2 "或"運算符
測試實例:
a cat
a dog
a bird
表達式: a (cat|dog)
意義表示: 先匹配a (空格)
然后后面要么是dog
要么是cat
3.3 字符類
3.3.1 []
測試實例:`
abc
tiger
aabbcc
dog
表達式: [abc]+
意義表示: 匹配由字母abc
構成的字母的單詞,方括號里的內容代表要求匹配的字符只能取自于它們
3.3.2 ^
測試實例:
abc
tiger
aabbcc
dog
1234678
abc123456
ABCDEFG
表達式: [^1-9]+
意義表示: 匹配非數字字符,匹配除了^號后面的字符的字符
3.3 特殊字符
3.3.1 一般特殊
\d :匹配任何數字,相當于 [0-9]。
\D :匹配任何非數字字符,相當于 [^0-9]。
\w :匹配任何單詞字符(字母、數字或下劃線),相當于 [a-zA-Z0-9_]。
\W :匹配任何非單詞字符,相當于 [^a-zA-Z0-9_]。
\s :匹配任何空白字符(空格、制表符、換行符等)。
\S :匹配任何非空白字符。
.:表示任意字符,但是不包括換行符
3.3.2 二般特殊
^ :匹配輸入字符串的開始位置。
例子:^abc 僅匹配以 abc 開頭的字符串。$ :匹配輸入字符串的結束位置。
例子:abc$ 僅匹配以 abc 結尾的字符串
四、高級用法
4.1 貪婪與懶惰匹配
<span><b>This is a sample text</b></span>
表達式:<.+?>
意義: 它會將正則表達式中的默認的貪婪匹配切換為懶惰匹配。
解析:
<.+?>
<:匹配字符 <,表示開始一個標簽。
.:匹配任意單個字符(除了換行符)。這意味著這個正則表達式會匹配標簽內的任意字符。
+:表示前面的字符(在本例中是 .)出現一次或多次。因此,.+ 會匹配一個或多個任意字符。
?:在這里是一個惰性量詞(lazy quantifier)。將 ? 放在 + 后面,使得正則表達式匹配盡可能少的字符即可(即最小匹配)。因此,.+? 會匹配至少一個字符,但會盡可能少地匹配,以便找到整個模式的結束部分。
>:匹配字符 >,表示結束一個標簽。
五、實例
5.1 匹配rgb顏色
#00
#ffffff
#ffaaff
#00hh80
#aabbcc
#000000
#ffffffff
匹配字符串:
#[a-fA-F0-9]{6}\b
其中\b
是單詞字符的邊界,用來去掉最后一個#ffffffff
5.2 匹配IPV4
123
255.255.255.0
192.168.0.1
0.0.0.0
256.1.1.1
This is a string.
123.123.0
匹配字符串:
復雜還沒搞懂
六、總結
6.1 評論區總結
來自評論區《喝酸奶的一顆竹子》
匹配符:
d? d出現0/1次
a* a可以出現0/多次
a+ a出現一次以上
a{6} a出現6次
a{2,} a出現2次以上
a{2,6} a出現2-6次
匹配多個字符:
(ab)+ ab出現一次以上
或運算:
a (cat|dog) 匹配 a cat or a dog
a cat|dog 匹配 a cat or dog
字符類:
匹配由abc構成的數據【abc】+ abc出現一次以上 abc aabbcc
【a-zA-Z0-9】 ABCabc123
^ 排除 【^0-9】 匹配0-9之外的數據(包括換行符)
元字符
\d 數字字符 \d+ 匹配一個以上的數字
\D 非數字字符
\w 單詞字符 單詞 數字 下劃線即英文字符
\W 非單詞字符
\s 空白符 包含空格和換行符
\S 非空白字符
\b 單詞的邊界 單詞的開頭或結尾 單詞與符號之前的邊界
\B 非單詞的邊界 符號與符號 單詞與單詞的邊界
. 任意字符不包含換行符
\. 表示. 通過\進行了轉意
^ 匹配行首 $ 匹配行尾
*+{}貪婪匹配
<strong><b>https://www.wondershare. com</strong></b>
<.+> 會匹配整串 因為是貪婪匹配
<.+?> 只匹配兩個標簽代碼,+? 設置為懶惰匹配