正則表達(dá)式
正則表達(dá)式(Regular Expression),通常簡稱為正則或正則表達(dá)式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進(jìn)行字符串匹配、替換、提取等操作。
正則表達(dá)式提供了一種靈活、強(qiáng)大且通用的方式來處理文本。它可以用于各種編程語言和文本編輯器中,例如Python、Java、JavaScript等,幾乎所有語言很多場景都可以用到正則表達(dá)式。
使用正則表達(dá)式,可以進(jìn)行以下操作:
- 匹配:檢查一個字符串是否與指定的模式匹配。
- 搜索:在一個字符串中搜索滿足指定模式的內(nèi)容。
- 替換:將字符串中滿足指定模式的部分替換為其他內(nèi)容。
- 提取:從一個字符串中提取出滿足指定模式的內(nèi)容。
正則表達(dá)式使用一些特殊字符和語法來表示不同的匹配規(guī)則,例如:
- 字符匹配:使用普通字符表示匹配該字符本身。
- 字符類:使用方括號 [] 表示匹配指定范圍內(nèi)的字符。
- 量詞:使用特殊字符表示匹配字符出現(xiàn)的次數(shù),如 *、+、?、{}。
- 邊界匹配:使用特殊字符表示匹配字符串的邊界或位置,如 ^、$、\b。
- 分組:使用圓括號 () 表示將一組字符作為一個單元進(jìn)行匹配或提取。
正則表達(dá)式的語法和特性因不同的實(shí)現(xiàn)和工具而略有差異,但基本的概念和常用的模式匹配規(guī)則是通用的。
學(xué)習(xí)工具推薦:
下載與安裝
你可以使用以下兩種方式中的任意一個來下載安裝正則表達(dá)式測試器,這個工具源文本內(nèi)容不能輸入太多,要么有時候會匹配不成功。
- 安裝版
- 下載 Regester安裝程序
- 解壓后運(yùn)行 RegesterSetup.zh.exe
- 綠色版
- 下載 Regester
- 解壓后運(yùn)行 Regester.exe
- 如果無法啟動,請自行下載安裝 Microsoft .Net Framework 4.8 后再試
常見正則表達(dá)式命令和參數(shù)解釋:
-
.
(點(diǎn)號):匹配除換行符外的任意字符。- 示例:
a.b
可以匹配 “aab”、“acb”、“adb” 等,但不匹配 “a\nb”。
- 示例:
-
*
:匹配前面的字符零次或多次。- 示例:
ab*c
可以匹配 “ac”、“abc”、“abbc” 等。
- 示例:
-
+
:匹配前面的字符一次或多次。- 示例:
ab+c
可以匹配 “abc”、“abbc” 等,但不匹配 “ac”。
- 示例:
-
?
:匹配前面的字符零次或一次。- 示例:
ab?c
可以匹配 “ac”、“abc”,但不匹配 “abbc”。
- 示例:
-
[]
(字符類):匹配方括號內(nèi)的任意字符。- 示例:
[abc]
可以匹配 “a”、“b”、“c” 中的任意一個字符。
- 示例:
-
[^]
(否定字符類):匹配不在方括號內(nèi)的任意字符。- 示例:
[^abc]
可以匹配除了 “a”、“b”、“c” 以外的任意字符。
- 示例:
-
\d
:匹配任意數(shù)字字符(0-9)。- 示例:
\d+
可以匹配一個或多個數(shù)字字符。
- 示例:
-
\w
:匹配任意字母、數(shù)字或下劃線字符。- 示例:
\w+
可以匹配一個或多個字母、數(shù)字或下劃線字符。
- 示例:
-
\s
:匹配任意空白字符(空格、制表符、換行符等)。- 示例:
\s+
可以匹配一個或多個空白字符。
- 示例:
-
^
:匹配字符串的開頭。- 示例:
^abc
可以匹配以 “abc” 開頭的字符串。
- 示例:
-
$
:匹配字符串的結(jié)尾。- 示例:
abc$
可以匹配以 “abc” 結(jié)尾的字符串。
- 示例:
-
()
(分組):將字符組合成一個單元,可以對其進(jìn)行操作。- 示例:
(ab)+
可以匹配 “ab”、“abab”、“ababab” 等。
- 示例:
零寬斷言匹配示例:
零寬斷言(Zero-width assertions)是正則表達(dá)式中的一種特殊語法,用于在匹配過程中對位置進(jìn)行條件限制,而不匹配實(shí)際的字符。它們被稱為零寬度斷言,因?yàn)樗鼈儾粫淖址械淖址瑑H用于確定匹配發(fā)生的位置。
零寬斷言分為正向斷言(Lookahead)和負(fù)向斷言(Lookbehind)兩種類型。正向斷言用于指定位置后面的條件,負(fù)向斷言用于指定位置前面的條件。
-
正向肯定預(yù)查(Positive Lookahead):
-
(?=abc)
:匹配后面緊跟著 “abc” 的位置。 - 示例:
a(?=bc)
可以匹配 “a”,但只有在后面跟著 “bc” 的情況下才匹配成功。
-
-
正向否定預(yù)查(Negative Lookahead):
-
(?!abc)
:匹配后面不緊跟著 “abc” 的位置。 - 示例:
a(?!bc)
可以匹配 “a”,但只有在后面不跟著 “bc” 的情況下才匹配成功。
-
-
負(fù)向肯定預(yù)查(Positive Lookbehind):
-
(?<=abc)
:匹配前面緊跟著 “abc” 的位置。 - 示例:
(?<=ab)c
可以匹配 “c”,但只有在前面緊跟著 “ab” 的情況下才匹配成功。
-
-
負(fù)向否定預(yù)查(Negative Lookbehind):
-
(?<!abc)
:匹配前面不緊跟著 “abc” 的位置。 - 示例:
(?<!ab)c
可以匹配 “c”,但只有在前面不跟著 “ab” 的情況下才匹配成功。
-
貪婪匹配非貪婪匹配
貪婪匹配(Greedy matching)和非貪婪匹配(Non-greedy matching)是正則表達(dá)式中量詞(匹配內(nèi)容多還是少)的匹配模式。
貪婪匹配
是指在滿足匹配條件的前提下,盡可能多地匹配字符。它會盡量擴(kuò)展匹配的范圍,直到無法再匹配為止。貪婪匹配使用量詞 +
、*
、{n,}
等,默認(rèn)情況下都是貪婪匹配。
例如:正則表達(dá)式 a+
會盡量匹配連續(xù)重復(fù)的字符 “a”,直到遇到不是 “a” 的字符為止。
非貪婪匹配
是指在滿足匹配條件的前提下,盡可能少地匹配字符。它會盡量縮小匹配的范圍,以便允許后續(xù)的匹配得到滿足。非貪婪匹配使用量詞后面添加 ?
來表示。例如,正則表達(dá)式 a+?
會匹配盡可能少的連續(xù)重復(fù)的字符 “a”,以滿足匹配的條件。
通過比較貪婪匹配和非貪婪匹配,可以更好地控制正則表達(dá)式的匹配行為。貪婪匹配通常用于盡可能多地捕獲匹配的內(nèi)容,而非貪婪匹配通常用于盡可能少地匹配,特別是在需要處理嵌套結(jié)構(gòu)或提取特定部分的情況下非常有用。
貪婪匹配示例:
正則表達(dá)式:[a-z]+
輸入字符串:abcdefg
匹配結(jié)果:abcdefg
解釋:貪婪匹配會盡可能多地匹配小寫字母。在這個示例中,正則表達(dá)式 [a-z]+ 匹配了整個字符串 abcdefg,因?yàn)樗梢云ヅ湟粋€或多個連續(xù)的小寫字母。
非貪婪匹配示例:
正則表達(dá)式:[a-z]+?
輸入字符串:abcdefg
匹配結(jié)果:a
解釋:非貪婪匹配使用 ? 后綴來指示盡可能少地匹配小寫字母。在這個示例中,正則表達(dá)式 [a-z]+? 只匹配了第一個小寫字母 “a”,因?yàn)樗M可能少地匹配滿足條件的字符。
貪婪匹配和非貪婪匹配的比較:
正則表達(dá)式:“.+”
輸入字符串:“Hello” “World”
匹配結(jié)果(貪婪匹配):“Hello” “World”
匹配結(jié)果(非貪婪匹配):“Hello”
解釋:貪婪匹配會盡可能多地匹配字符,因此 “.+” 會匹配整個字符串 “Hello” “World”。而非貪婪匹配則盡可能少地匹配字符,因此 “.+?” 只匹配了第一個字符串 “Hello”。
貪婪匹配和非貪婪匹配的比較:
正則表達(dá)式:[0-9]+
輸入字符串:12345
匹配結(jié)果(貪婪匹配):12345
匹配結(jié)果(非貪婪匹配):12345
解釋:無論是貪婪匹配還是非貪婪匹配,正則表達(dá)式 [0-9]+ 都會匹配整個字符串 12345,因?yàn)樗梢云ヅ湟粋€或多個連續(xù)的數(shù)字。
正則表達(dá)式練習(xí)題:
- 匹配郵箱地址:
正則表達(dá)式:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
示例輸入:example@example.com
^:表示匹配字符串的開頭。
\w+:表示匹配一個或多個字母、數(shù)字或下劃線,這部分匹配了郵箱地址的用戶名部分。
([-+.]\w+)*
:表示匹配一個連字符、加號或句點(diǎn)后跟一個或多個字母、數(shù)字或下劃線的組合,這部分匹配了用戶名中的特殊字符及后續(xù)字符,可以重復(fù)零次或多次。@:表示匹配郵箱地址中的@
\w+:表示匹配一個或多個字母、數(shù)字或下劃線,這部分匹配了郵箱地址的域名中的名稱部分。
([-.]\w+)*
:表示匹配一個連字符或句點(diǎn)后跟一個或多個字母、數(shù)字或下劃線的組合,這部分匹配了域名中的特殊字符及后續(xù)字符,可以重復(fù)零次或多次。
.:表示匹配郵箱地址中的點(diǎn)號(.),需要使用反斜杠進(jìn)行轉(zhuǎn)義。\w+:表示匹配一個或多個字母、數(shù)字或下劃線,這部分匹配了郵箱地址中的頂級域名部分。
([-.]\w+)*
:表示匹配一個連字符或句點(diǎn)后跟一個或多個字母、數(shù)字或下劃線的組合,這部分匹配了頂級域名中的特殊字符及后續(xù)字符,可以重復(fù)零次或多次。
$:表示匹配字符串的結(jié)尾。
- 匹配手機(jī)號碼(簡化版):
正則表達(dá)式:^\d{11}$
示例輸入:12345678901
^:表示匹配字符串的開頭。
\d:表示匹配一個數(shù)字。
{11}:表示前面的元素(即數(shù)字)必須連續(xù)重復(fù)11次。
$:表示匹配字符串的結(jié)尾。
- 匹配日期(格式為YYYY-MM-DD):
正則表達(dá)式:^\d{4}-\d{2}-\d{2}$
示例輸入:2023-08-09
^:表示匹配字符串的開頭。
\d:表示匹配一個數(shù)字。
{4}:表示前面的元素(即數(shù)字)必須連續(xù)重復(fù)4次,即匹配4位數(shù)字的年份。
-:表示匹配連字符。
\d{2}:表示前面的元素(即數(shù)字)必須連續(xù)重復(fù)2次,即匹配2位數(shù)字的月份。
-:表示匹配連字符。
\d{2}:表示前面的元素(即數(shù)字)必須連續(xù)重復(fù)2次,即匹配2位數(shù)字的日期。
$:表示匹配字符串的結(jié)尾。
- 匹配URL(以http或https開頭):
正則表達(dá)式:^(http|https)://[^\s/$.?#].[^\s]*$
示例輸入:https://www.example.com
^:表示匹配字符串的開頭。
(http|https):使用括號和豎線(|)表示分組,表示匹配 http 或 https。
??/:表示匹配 ??/ 字符串。[^\s/$.?#]
:表示匹配任意不是空白字符、斜杠、問號、點(diǎn)號或井號的字符。
.:表示匹配一個任意字符。[^\s]*
:表示匹配零個或多個任意不是空白字符的字符。
$:表示匹配字符串的結(jié)尾。
- 匹配整數(shù)(包括正負(fù)整數(shù)):
正則表達(dá)式:^-?\d+$
示例輸入:-123
^:表示匹配字符串的開頭。
-?:表示匹配可選的負(fù)號(減號)。- 表示匹配一個負(fù)號,? 表示前面的元素(即負(fù)號)可選。
\d+:表示匹配一個或多個數(shù)字。
$:表示匹配字符串的結(jié)尾。
- 匹配英文句子(以句號結(jié)尾):
正則表達(dá)式:^[A-Z][^.!?]*\.$
示例輸入:This is a sentence.
^:表示匹配字符串的開頭。
[A-Z]:表示匹配一個大寫字母。[^.!?]*
:表示匹配零個或多個非句號、非問號和非感嘆號的字符。這個部分用于匹配句子中除了句號以外的其他內(nèi)容。
.:表示匹配句號。需要使用反斜杠進(jìn)行轉(zhuǎn)義,因?yàn)榫涮栐谡齽t表達(dá)式中是一個特殊字符。
$:表示匹配字符串的結(jié)尾。
- 匹配HTML標(biāo)簽(包括屬性):
正則表達(dá)式:<([a-z]+)(\s[a-z]+\s*=\s*"[^"]*")*\s*>.*<\/\1>$
示例輸入:<div class="example">This is a div.</div>
匹配結(jié)果:匹配成功
<([a-z]+):表示匹配以 < 開始的標(biāo)簽,并捕獲標(biāo)簽名。 [a-z]+ 表示匹配一個或多個小寫字母。
(\s[a-z]+\s*=\s*"[^"]*")*
:表示匹配零個或多個屬性,每個屬性由一個或多個小寫字母組成的屬性名、可選的空白字符、等號、可選的空白字符、以及由雙引號包圍的屬性值組成。這部分用于匹配標(biāo)簽中的屬性。\s*>
:表示匹配以空白字符結(jié)尾并以 > 結(jié)束的標(biāo)簽起始部分。.*
:表示匹配零個或多個任意字符,用于匹配標(biāo)簽內(nèi)的內(nèi)容。
</\1>:表示匹配以 </ 開始、后跟與起始標(biāo)簽相同的標(biāo)簽名、以 > 結(jié)束的結(jié)束標(biāo)簽。 \1 表示引用第一個捕獲組中的標(biāo)簽名。
- 匹配IP地址(簡易版):
正則表達(dá)式:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
示例輸入:192.168.0.1
匹配結(jié)果:匹配成功
^:表示匹配字符串的開頭。
\d{1,3}:表示匹配一個由 1 到 3 位數(shù)字組成的部分。
.:表示匹配一個點(diǎn)號(.)。需要使用反斜杠進(jìn)行轉(zhuǎn)義,因?yàn)辄c(diǎn)號在正則表達(dá)式中是一個特殊字符。
.:表示匹配任意字符。
$:表示匹配字符串的結(jié)尾。
- 匹配郵政編碼(6位數(shù)字):
正則表達(dá)式:^\d{6}$
示例輸入:123456
匹配結(jié)果:匹配成功
^:表示匹配字符串的開頭。
\d{6}:表示匹配六個連續(xù)的數(shù)字。
\d:表示匹配一個數(shù)字。
{6}:表示前面的元素(即數(shù)字)重復(fù)出現(xiàn)六次。
$:表示匹配字符串的結(jié)尾。
- 匹配用戶名(由字母、數(shù)字、下劃線組成,長度為4-16位):
正則表達(dá)式:^[a-zA-Z0-9_]{4,16}$
示例輸入:user_123
匹配結(jié)果:匹配成功
^:表示匹配字符串的開頭。
[a-zA-Z0-9_]:表示匹配一個字母(大小寫)、數(shù)字或下劃線字符。
{4,16}:表示前面的元素(即字母、數(shù)字或下劃線)重復(fù)出現(xiàn) 4 到 16 次,限制了字符串的長度范圍。
$:表示匹配字符串的結(jié)尾。
我們?yōu)槭裁葱枰獙W(xué)習(xí)正則表達(dá)式:
-
文本處理和搜索: 正則表達(dá)式是一種強(qiáng)大的工具,可用于在文本中進(jìn)行搜索、匹配、替換和提取操作。它們可以幫助你快速有效地處理和操縱文本數(shù)據(jù)。
-
模式匹配和驗(yàn)證: 正則表達(dá)式是用于匹配和驗(yàn)證特定模式的工具。你可以使用它們來驗(yàn)證輸入數(shù)據(jù)的格式、匹配特定模式的字符串,例如郵箱地址、URL、電話號碼等。
-
編程和腳本語言支持: 正則表達(dá)式在許多編程語言和腳本語言中都有廣泛的支持,包括 Python、JavaScript、Java、C#等。了解正則表達(dá)式可以幫助你在編程中更好地處理字符串操作。
-
文本編輯器和IDE: 許多文本編輯器和集成開發(fā)環(huán)境(IDE)都支持正則表達(dá)式搜索和替換功能。掌握正則表達(dá)式可以提高你在編碼和文本編輯過程中的效率。
-
數(shù)據(jù)清洗和提取: 在數(shù)據(jù)處理和清洗過程中,正則表達(dá)式可以幫助你快速提取、篩選和轉(zhuǎn)換數(shù)據(jù)。它們特別適用于處理大量文本數(shù)據(jù)或具有特定格式的數(shù)據(jù)。
-
網(wǎng)絡(luò)爬蟲和數(shù)據(jù)抓?。?/strong> 當(dāng)你需要從網(wǎng)頁或其他來源中抓取數(shù)據(jù)時,正則表達(dá)式可以幫助你定位和提取所需的信息。它們是構(gòu)建簡單的網(wǎng)絡(luò)爬蟲和數(shù)據(jù)抓取工具的有用工具。文章來源:http://www.zghlxwxcb.cn/news/detail-795803.html
學(xué)習(xí)正則表達(dá)式可以提升你在文本處理、模式匹配、數(shù)據(jù)清洗和編程方面的技能。它們是處理和操作文本的強(qiáng)大工具,廣泛應(yīng)用于軟件開發(fā)、數(shù)據(jù)分析、文本處理等領(lǐng)域。掌握正則表達(dá)式將為你提供更多的靈活性和能力來處理和操作各種類型的文本數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-795803.html
到了這里,關(guān)于正則表達(dá)式詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!