正則表達(dá)式必知必會(huì)之重復(fù)匹配詳細(xì)示例
一、有多少個(gè)匹配
1. 匹配一個(gè)或多個(gè)字符(+)
要想匹配某個(gè)字符(或字符集合)的一次或多次重復(fù),只要簡(jiǎn)單地在其后面加上一個(gè) + 字符就行了。+ 匹配一個(gè)或多個(gè)字符(至少一個(gè);不匹配零個(gè)字符的情況)。比如,a 匹配 a 本身,a+ 匹配一個(gè)或多個(gè)連續(xù)出現(xiàn)的 a。類似地,[0-9] 匹配任意單個(gè)數(shù)字,[0-9]+ 匹配一個(gè)或多個(gè)連續(xù)的數(shù)字。
在給一個(gè)字符集合加上 + 后綴的時(shí)候,必須把 + 放在這個(gè)字符集合的外面。比如說(shuō),[0-9]+ 是正確的,[0-9+]則不正確。[0-9+] 其實(shí)也是一個(gè)有效的正則表達(dá)式,但它匹配的不是一個(gè)或多個(gè)數(shù)字,它定義了一個(gè)由數(shù)字 0 到 9 和 + 構(gòu)成的字符集合,因而只能匹配單個(gè)的數(shù)字字符或加號(hào)。
mysql> set @s:='Send personal email to ben@forta.com. For questions '> about a book use support@forta.com. Feel free to send '> unsolicited email to spam@forta.com (wouldn\'t it be '> nice if it were that simple, huh?).'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='\\w+@\\w+\\.\\w+'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+------------------------------------------------+-----------+ | c | s | i | +------+------------------------------------------------+-----------+ | 3 | ben@forta.com,support@forta.com,spam@forta.com | 24,70,128 | +------+------------------------------------------------+-----------+ 1 row in set (0.01 sec)
該模式正確地匹配到了所有的 3 個(gè)電子郵件地址。這個(gè)正則表達(dá)式先用第一個(gè) \w+ 匹配一個(gè)或多個(gè)字母數(shù)字字符,再用第二個(gè) \w+ 匹配 @ 后面的一個(gè)或多個(gè)字符,然后匹配一個(gè) . 字符(使用轉(zhuǎn)義序列 \.),最后用第三個(gè) \w+ 匹配電子郵件地址的剩余部分。
+ 是一個(gè)元字符。如果需要匹配 + 本身,就必須使用轉(zhuǎn)義序列 \+。+ 還可以用來(lái)匹配一個(gè)或多個(gè)字符集合。為了演示這種用法,在下面這個(gè)例子里使用了和剛才一樣的正則表達(dá)式,但文本內(nèi)容和上一個(gè)例子中稍有不同。
mysql> set @s:='Send personal email to ben@forta.com or '> ben.forta@forta.com. For questions about a '> book use support@forta.com. If your message '> is urgent try ben@urgent.forta.com. Feel '> free to send unsolicited email to '> spam@forta.com (wouldn\'t it be nice if '> it were that simple, huh?).'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+---------------------------------------------------------------------------------+------------------+ | c | s | i | +------+---------------------------------------------------------------------------------+------------------+ | 5 | ben@forta.com,forta@forta.com,support@forta.com,ben@urgent.forta,spam@forta.com | 24,45,93,142,203 | +------+---------------------------------------------------------------------------------+------------------+ 1 row in set (0.01 sec)
這個(gè)正則表達(dá)式匹配到了 5 個(gè)電子郵件地址,但其中有 2 個(gè)不夠完整。為什么會(huì)這樣?因?yàn)?\w+@\w+\.\w+ 并沒(méi)有考慮到 @ 之前的 . 字符,它只允許 @ 之后的兩個(gè)字符串之間出現(xiàn)單個(gè) . 字符。盡管 ben.forta@forta.com 是一個(gè)完全有效的電子郵件地址,但該正則表達(dá)式只能匹配 forta(而不是 ben.forta),因?yàn)?\w 只能匹配字母數(shù)字字符,無(wú)法匹配出現(xiàn)在字符串中間的 . 字符。在這里,需要匹配 \w 或 .。用正則表達(dá)式語(yǔ)言來(lái)說(shuō),就是匹配字符集合 [\w.]。下面是改進(jìn)版本。
mysql> set @r:='[\\w.]+@[\\w.]+\\.\\w+'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+-----------------------------------------------------------------------------------------+------------------+ | c | s | i | +------+-----------------------------------------------------------------------------------------+------------------+ | 5 | ben@forta.com,ben.forta@forta.com,support@forta.com,ben@urgent.forta.com,spam@forta.com | 24,41,93,142,203 | +------+-----------------------------------------------------------------------------------------+------------------+ 1 row in set (0.01 sec)
新的正則表達(dá)式看起來(lái)用了些技巧。[\w.]+ 匹配字母數(shù)字字符、下劃線和 . 的一次或多次重復(fù)出現(xiàn),而 ben.forta 完全符合這一條件。@ 字符之后也用到了 [\w.]+,這樣就可以匹配到層級(jí)更深的域(或主機(jī))名。注意 這個(gè)正則表達(dá)式的最后一部分是 \w+ 而不是 [\w.]+。如果把 [\w.] 用作這個(gè)模式的最后一部分,在第二、第三和第四個(gè)匹配上就會(huì)出問(wèn)題。
這里沒(méi)有對(duì)字符集合 [\w.] 里的 . 字符進(jìn)行轉(zhuǎn)義,但依然能夠匹配 . 字符。一般來(lái)說(shuō),當(dāng)在字符集合里使用的時(shí)候,像 . 和 + 這樣的元字符將被解釋為普通字符,不需要轉(zhuǎn)義,但轉(zhuǎn)義了也沒(méi)有壞處。[\w.] 的使用效果與 [\w\.] 是一樣的。
2. 匹配零個(gè)或多個(gè)字符(*)
+ 匹配一個(gè)或多個(gè)字符,但不匹配零個(gè)字符,+ 最少也要匹配一個(gè)字符。如果想匹配一個(gè)可有可無(wú)的字符,也就是該字符可以出現(xiàn)零次或多次的情況,需要用 * 元字符來(lái)完成。* 的用法與 + 完全一樣,只要把它放在某個(gè)字符(或字符集合)的后面,就可以匹配該字符(或字符集合)出現(xiàn)零次或多次的情況。比如說(shuō),模式 B.* Forta 將匹配 B Forta、B. Forta、Ben Forta 以及其他組合。
mysql> set @s:='Hello .ben@forta.com is my email address.'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='[\\w.]+@[\\w.]+\\.\\w+'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+----------------+------+ | c | s | i | +------+----------------+------+ | 1 | .ben@forta.com | 7 | +------+----------------+------+ 1 row in set (0.01 sec)
[\w.]+ 匹配字母數(shù)字字符、下劃線和 . 的一次或多次重復(fù)出現(xiàn),而 .ben 完全符合這一條件。文本里多了一個(gè) .,把它用作電子郵件地址的第一個(gè)字符就無(wú)效了。換句話說(shuō),需要匹配的其實(shí)是帶有可選的額外字符的字母數(shù)字文本,就像下面這樣。
mysql> set @r:='\\w+[\\w.]*@[\\w.]+\\.\\w+'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+----------------+------+ | c | s | i | +------+----------------+------+ | 1 | ben@forta.com | 8 | +------+----------------+------+ 1 row in set (0.01 sec)
\w+ 匹配任意單個(gè)字母數(shù)字字符,但不包括 .,這些是可以作為電子郵件地址起始的有效字符。經(jīng)過(guò)開頭部分若干個(gè)有效字符之后,也許會(huì)出現(xiàn)一個(gè) . 和其他額外的字符,不過(guò)也可能沒(méi)有。[\w.]* 匹配 . 或字母數(shù)字字符的零次或多次重復(fù)出現(xiàn)??梢园?* 理解為一種“使其可選”(make it optional)的元字符。+ 需要最少匹配一次,而 * 可以匹配多次,也可以一次都不匹配。* 是一個(gè)元字符。如果需要匹配 * 本身,就必須使用轉(zhuǎn)義序列 \*。
3. 匹配零個(gè)或一個(gè)字符(?)
另一個(gè)非常有用的元字符是 ?。和 + 一樣,? 能夠匹配可選文本(所以就算文本沒(méi)有出現(xiàn),也可以匹配)。但與 + 不同,? 只能匹配某個(gè)字符(或字符集合)的零次或一次出現(xiàn),最多不超過(guò)一次。? 非常適合匹配一段文本中某個(gè)特定的可選字符。
mysql> set @s:='The URL is http://www.forta.com/, to connect '> securely use https://www.forta.com/ instead.'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='http://[\\w./]+'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+-----------------------+------+ | c | s | i | +------+-----------------------+------+ | 1 | http://www.forta.com/ | 12 | +------+-----------------------+------+ 1 row in set (0.01 sec)
該模式用來(lái)匹配 URL 地址:http:// 加上 [\w./]+(匹配字母數(shù)字字符、.和/的一次或多次重復(fù)出現(xiàn))。這個(gè)模式只能匹配第一個(gè) URL 地址。簡(jiǎn)單地在 http 的后面加上一個(gè) s*(s的零次或多次重復(fù))并不能真正解決這個(gè)問(wèn)題,因?yàn)檫@樣也能匹配 httpsssss://,顯然是無(wú)效的URL??梢栽?http 的后面加上一個(gè) s?。
mysql> set @r:='https?://[\\w./]+'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_count(@s, @r, '') c, regexp_extract(@s, @r, '') s, regexp_extract_index(@s, @r, 0, '') i; +------+----------------------------------------------+-------+ | c | s | i | +------+----------------------------------------------+-------+ | 2 | http://www.forta.com/,https://www.forta.com/ | 12,59 | +------+----------------------------------------------+-------+ 1 row in set (0.01 sec)
該模式的開頭部分是 https?://。? 在這里的含義是:前面的字符 s 要么不出現(xiàn),要么最多出現(xiàn)一次。換句話說(shuō),https?:// 既可以匹配 http://,也可以匹配 https://。? 還可以解決不同平臺(tái)匹配不同換行符的問(wèn)題。例如 Windows 使用 \r\n,Unix或Linux系統(tǒng)上使用 \n,理想的解決方案是匹配一個(gè)可選的 \r 和一個(gè) \n。
mysql> set @s:='"101","Ben","Forta" '> "102","Jim","James" '> '> "103","Roberta","Robertson" '> "104","Bob","Bobson"'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='[\\r]?\\n[\\r]?\\n'; Query OK, 0 rows affected (0.00 sec) mysql> select @r r , regexp_replace(@s,@r,'\n') s; +----------------+------------------------------------------------------------------------------------------+ | r | s | +----------------+------------------------------------------------------------------------------------------+ | [\r]?\n[\r]?\n | "101","Ben","Forta" "102","Jim","James" "103","Roberta","Robertson" "104","Bob","Bobson" | +----------------+------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
[\r]?\n 匹配一個(gè)可選的 \r 和一個(gè)必不可少的 \n。上面這個(gè)例子里的正則表達(dá)式使用的是 [\r]? 而不是 \r?。[\r] 定義了一個(gè)字符集合,該集合只有元字符 \r 這一個(gè)成員,因而 [\r]? 在功能上與 \r? 完全等價(jià)。[ ] 的常規(guī)用法是把多個(gè)字符定義為一個(gè)集合,但有不少程序員喜歡把一個(gè)字符也定義為一個(gè)集合。這么做的好處是可以增加可讀性和避免產(chǎn)生誤解,讓人們一眼就可以看出隨后的元字符應(yīng)用于誰(shuí)。如果打算同時(shí)使用 [ ] 和 ?,記得把 ? 放在字符集合的外面。因此,http[s]?:// 是正確的,若是寫成 http[s?]://可就不對(duì)了。? 是一個(gè)元字符。如果需要匹配 ? 本身,就必須使用轉(zhuǎn)義序列 \?。
二、匹配的重復(fù)次數(shù)
正則表達(dá)式里的 +、* 和 ? 解決了許多問(wèn)題,但有時(shí)候光靠它們還不夠。+ 和 * 匹配的字符個(gè)數(shù)沒(méi)有上限,無(wú)法為其匹配的字符個(gè)數(shù)設(shè)定一個(gè)最大值。+、* 和 ? 匹配的字符最小數(shù)量是零個(gè)或一個(gè),無(wú)法明確地為其匹配的字符個(gè)數(shù)另行設(shè)定一個(gè)最小值。無(wú)法指定具體的匹配次數(shù)。
為了解決這些問(wèn)題并對(duì)重復(fù)性匹配有更多的控制權(quán),正則表達(dá)式允許使用重復(fù)范圍(interval)。重復(fù)范圍在 { 和 } 之間指定。{ 和 } 是元字符,如果需要匹配自身,就應(yīng)該用 \ 對(duì)其進(jìn)行轉(zhuǎn)義。
1. 具體的重復(fù)匹配
要想設(shè)置具體的匹配次數(shù),把數(shù)字寫在 { 和 } 之間即可。比如說(shuō),{3} 意味著匹配前一個(gè)字符(或字符集合)3 次。如果只能匹配 2 次,則不算是匹配成功。為了演示這種用法,再來(lái)看一下匹配 RGB 值的例子。RGB 值是一個(gè)十六進(jìn)制數(shù)值,這個(gè)值分成 3 個(gè)部分,每個(gè)部分包括兩位十六進(jìn)制數(shù)字。
mysql> set @s:='body { r, 0, ''); '> background-color: #fefbd8; '> } '> h1 { '> background-color: #0000ff; '> } '> div { '> background-color: #d0f4e6; '> } '> span { '> background-color: #f08970; '> }'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='#[A-Fa-f0-9]{6}'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_extract(@s, @r, ''), regexp_extract_index(@s, @r, 0, ''); +---------------------------------+-------------------------------------+ | regexp_extract(@s, @r, '') | regexp_extract_index(@s, @r, 0, '') | +---------------------------------+-------------------------------------+ | #fefbd8,#0000ff,#d0f4e6,#f08970 | 30,68,107,147 | +---------------------------------+-------------------------------------+ 1 row in set (0.00 sec)
[A-Fa-f0-9] 匹配單個(gè)十六進(jìn)制字符,{6} 要求重復(fù)匹配該字符 6 次。區(qū)間匹配的用法也適用于 POSIX 字符類。
2. 區(qū)間范圍
{} 語(yǔ)法還可以用來(lái)為重復(fù)匹配次數(shù)設(shè)定一個(gè)區(qū)間范圍,也就是匹配的最小次數(shù)和最大次數(shù)。區(qū)間必須以{2,4}(最少重復(fù)2次,最多重復(fù)4次)這樣的形式給出。下面的例子使用一個(gè)這樣的正則表達(dá)式來(lái)檢查日期的格式。
mysql> set @s:='4/8/17 '> 10-6-2018 '> 2/2/2 '> 01-01-01'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='\\d{1,2}[-/]\\d{1,2}[-/]\\d{2,4}'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_extract(@s, @r, ''), regexp_extract_index(@s, @r, 0, ''); +----------------------------+-------------------------------------+ | regexp_extract(@s, @r, '') | regexp_extract_index(@s, @r, 0, '') | +----------------------------+-------------------------------------+ | 4/8/17,10-6-2018,01-01-01 | 1,8,24 | +----------------------------+-------------------------------------+ 1 row in set (0.00 sec)
這里列出的日期是一些由用戶可能通過(guò)表單字段輸入的值,這些值必須先進(jìn)行驗(yàn)證,確保格式正確。\d{1,2} 匹配一個(gè)或兩個(gè)數(shù)字字符(匹配天數(shù)和月份);\d{2,4} 匹配年份;[-/] 匹配日期分隔符 - 或 /??偣财ヅ涞搅?3 個(gè)日期值,2/2/2 不在此列,因?yàn)樗哪攴萏塘恕?/p>
上面這個(gè)例子里的模式并不能驗(yàn)證日期的有效性,諸如 54/67/9999 之類的無(wú)效日期也能通過(guò)這一測(cè)試。它只能用來(lái)檢查日期值的格式是否正確,這一環(huán)節(jié)通常安排在日期有效性驗(yàn)證之前。
重復(fù)范圍也可以從 0 開始。比如,{0,3} 表示重復(fù)次數(shù)可以是 0、1、2 或 3。我們?cè)?jīng)講過(guò),? 匹配它之前某個(gè)字符(或字符集合)的零次或一次出現(xiàn)。因此從效果上看,其等價(jià)于{0,1}。
3. 匹配“至少重復(fù)多少次”
重復(fù)范圍的最后一種用法是指定至少要匹配多少次(不指定最大匹配次數(shù))。這種用法的語(yǔ)法類似于區(qū)間范圍語(yǔ)法,只是省略了最大值部分而已。比如說(shuō),{3,}表示至少重復(fù)3次,換句話說(shuō),就是“重復(fù)3次或更多次”。來(lái)看一個(gè)例子,使用一個(gè)正則表達(dá)式把所有金額大于或等于100美元的訂單找出來(lái)。
mysql> set @s:='1001: $496.80 '> 1002: $1290.69 '> 1003: $26.43 '> 1004: $613.42 '> 1005: $7.61 '> 1006: $414.90 '> 1007: $25.00'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='\\d+: \\$\\d{3,}\\.\\d{2}'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_extract(@s, @r, ''), regexp_extract_index(@s, @r, 0, ''); +----------------------------------------------------------+-------------------------------------+ | regexp_extract(@s, @r, '') | regexp_extract_index(@s, @r, 0, '') | +----------------------------------------------------------+-------------------------------------+ | 1001: $496.80,1002: $1290.69,1004: $613.42,1006: $414.90 | 1,15,43,69 | +----------------------------------------------------------+-------------------------------------+ 1 row in set (0.00 sec)
這個(gè)例子里的文本取自一份報(bào)表,其中第一列是訂單號(hào),第二列是訂單金額。正則表達(dá)式首先使用 \d+: 來(lái)匹配訂單號(hào)(這部分其實(shí)可以省略——可以只匹配金額部分而不是包括訂單號(hào)在內(nèi)的一整行)。模式 \$\d{3,}\.\d{2} 用來(lái)匹配金額部分,其中 \$ 匹配 $,\d{3,} 匹配至少 3 位數(shù)字(因此,最少也得是100美元),\. 匹配 .,\d{2} 匹配小數(shù)點(diǎn)后面的 2 位數(shù)字。該模式從所有訂單中正確地匹配到了 4 個(gè)符合要求的訂單。
在使用重復(fù)范圍的時(shí)候一定要小心。如果遺漏了花括號(hào)里的逗號(hào),那么模式的含義將從至少匹配 n 次變成只匹配 n 次。+ 在功能上等價(jià)于{1,}。
三、防止過(guò)度匹配
? 的匹配范圍有限(僅限零次或一次匹配),當(dāng)使用精確數(shù)量或區(qū)間時(shí),重復(fù)范圍匹配也是如此。但本篇介紹的其他重復(fù)匹配形式在重復(fù)次數(shù)方面都沒(méi)有上限值,而這樣做有時(shí)會(huì)導(dǎo)致過(guò)度匹配的現(xiàn)象??紤]下面這個(gè)例子,例子中的文本取自某個(gè) Web 頁(yè)面,里面包含兩個(gè) HTML 的 <b> 標(biāo)簽。任務(wù)是用正則表達(dá)式匹配 <b> 標(biāo)簽中的文本。
mysql> set @s:='This offer is not available to customers '> living in <b>AK</b> and <b>HI</b>.'; Query OK, 0 rows affected (0.00 sec) mysql> set @r:='<[Bb]>.*</[Bb]>'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_extract(@s, @r, ''), regexp_extract_index(@s, @r, 0, ''); +----------------------------+-------------------------------------+ | regexp_extract(@s, @r, '') | regexp_extract_index(@s, @r, 0, '') | +----------------------------+-------------------------------------+ | <b>AK</b> and <b>HI</b> | 52 | +----------------------------+-------------------------------------+ 1 row in set (0.01 sec)
<[Bb]> 匹配起始 <b> 標(biāo)簽,</[Bb]> 匹配閉合 </b> 標(biāo)簽。但這個(gè)模式只找到了一個(gè)匹配,而不是預(yù)期的兩個(gè)。第一個(gè) <b> 標(biāo)簽和最后一個(gè) </b> 標(biāo)簽之間的所有內(nèi)容被 .* 一網(wǎng)打盡。這的確包含了想要匹配的文本,但其中也夾雜了其他標(biāo)簽。
為什么會(huì)這樣?因?yàn)?* 和 + 都是所謂的“貪婪型”(greedy)元字符,其匹配行為是多多益善而不是適可而止。它們會(huì)盡可能地從一段文本的開頭一直匹配到末尾,而不是碰到第一個(gè)匹配時(shí)就停止。這是有意設(shè)計(jì)的,量詞就是貪婪的(+、* 和 ? 也叫作“量詞”)。
在不需要這種“貪婪行為”的時(shí)候,該使用這些量詞的“懶惰型”(lazy)版本。之所以稱之為“懶惰型”是因?yàn)槠淦ヅ浔M可能少的字符,而非盡可能多地去匹配。懶惰型量詞的寫法是在貪婪型量詞后面加上一個(gè) ?。下表列出了貪婪型量詞及其對(duì)應(yīng)的懶惰型版本。
貪婪型量詞 | 懶惰型量詞 |
* | *? |
+ | +? |
{n,} | {n,}? |
下面是使用 *? 來(lái)解決之前那個(gè)例子的做法。
mysql> set @r:='<[Bb]>.*?</[Bb]>'; Query OK, 0 rows affected (0.00 sec) mysql> select regexp_extract(@s, @r, ''), regexp_extract_index(@s, @r, 0, ''); +----------------------------+-------------------------------------+ | regexp_extract(@s, @r, '') | regexp_extract_index(@s, @r, 0, '') | +----------------------------+-------------------------------------+ | <b>AK</b>,<b>HI</b> | 52,66 | +----------------------------+-------------------------------------+ 1 row in set (0.00 sec)
因?yàn)槭褂昧藨卸栊偷?*?,第一個(gè)匹配將僅限于<b>AK</b>,<b>HI</b>則成為了第二個(gè)匹配。
總結(jié)
到此這篇關(guān)于正則表達(dá)式必知必會(huì)之重復(fù)匹配的文章就介紹到這了,更多相關(guān)正則表達(dá)式重復(fù)匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用正則表達(dá)式實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的思路詳解
網(wǎng)頁(yè)爬蟲:就是一個(gè)程序用于在互聯(lián)網(wǎng)中獲取指定規(guī)則的數(shù)據(jù)。這篇文章主要介紹了使用正則表達(dá)式實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的思路詳解,需要的朋友可以參考下2018-12-12python實(shí)現(xiàn)統(tǒng)計(jì)漢字/英文單詞數(shù)的正則表達(dá)式
一個(gè)簡(jiǎn)單的程序,統(tǒng)計(jì)文本文檔中的單詞和漢字?jǐn)?shù),逆序排列(出現(xiàn)頻率高的排在最前面)python實(shí)現(xiàn)2012-09-09JavaScript 正則表達(dá)式驗(yàn)證函數(shù)代碼
上篇文章《JavaScript驗(yàn)證正則表達(dá)式大全》說(shuō)的是javascript中使用的正則表達(dá)式的例子,但是沒(méi)有說(shuō)這些正則表達(dá)式如何使用,現(xiàn)在給大家?guī)讉€(gè)例子,大家可以看看。2010-05-05dw(dreamweaver)正則表達(dá)式函數(shù)列表
dw(dreamweaver)正則表達(dá)式函數(shù)列表,需要的朋友可以參考下。2007-12-12手機(jī)號(hào)碼驗(yàn)證方法(正則驗(yàn)證)
這篇文章主要介紹了手機(jī)號(hào)碼驗(yàn)證方法(正則驗(yàn)證),在文章中還給大家補(bǔ)充了最新手機(jī)號(hào)的驗(yàn)證正則表達(dá)式,需要的朋友可以參考下2017-02-02