日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
PHP正則表達(dá)式,看這一篇就夠了
可能大家之前聽(tīng)說(shuō)過(guò)正則表達(dá)式,大概的印象是很難學(xué)、很復(fù)雜,有種深不可測(cè)的感覺(jué)。其實(shí)正則表達(dá)式?jīng)]有那么神秘,它是描述字符排列模式的一種自定義語(yǔ)法規(guī)則。許多語(yǔ)言,比如 PERL、php、Python、JavaScript 等都支持使用正則表達(dá)式。

本節(jié)就帶領(lǐng)大家來(lái)了解一下正則表達(dá)式。

什么是正則表達(dá)式

正則表達(dá)式也稱為模式表達(dá)式,自身具有一套非常完整的、可以編寫模式的語(yǔ)法體系,提供了一種靈活且直觀的字符串處理方法。正則表達(dá)式通過(guò)構(gòu)建具有特定規(guī)則的模式,與輸入的字符串信息比較,在特定的函數(shù)中使用從而實(shí)現(xiàn)字符串的匹配、查找、替換及分割等操作。

舉個(gè)我們?cè)谌粘I钪械睦?,如果想搜索電腦某個(gè)目錄下的所有 txt 格式的文件,就可以在該目錄下輸入
*.txt,然后按回車鍵,就可以列出目錄下的所有 txt 格式的文件了。這里使用到的
*.txt 就可以理解為一個(gè)簡(jiǎn)單的正則表達(dá)式。

下面使用正則表達(dá)式的語(yǔ)法構(gòu)建了兩個(gè)例子,如下所示:

/http(s)?:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is      // 匹配網(wǎng)址 URL 的正則表達(dá)式
/^\w{3,}@([a-z]{2,7}|[0-9]{3})\.(com|cn)$/                    // 匹配郵箱地址的正則表達(dá)式

不要被上例中看似亂碼的字符串給嚇退,它們就是按照正則表達(dá)式的語(yǔ)法規(guī)則構(gòu)建的,是一種由普通字符和具有特殊功能的字符組成的字符串。而且要將這些字符串放在特定的正則表達(dá)式函數(shù)中使用才有效果。

正則表達(dá)式的用途

正則表達(dá)式描述的是一種字符串匹配模式,可以用來(lái)檢查一個(gè)字符串中是否含有某種子串、將匹配的子串做替換或者從某個(gè)字符串中取出符合某個(gè)條件的子串等等。例如,當(dāng)用戶提交一個(gè)表單后,要判斷輸入的電話號(hào)碼、E-mail 地址等是否有效,用普通的基于字面的字符驗(yàn)證顯然是不夠的。

正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為“元字符”)組成的文字模式。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。正則表達(dá)式的模式可以是單個(gè)的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

使用正則表達(dá)式的目的就是可以通過(guò)簡(jiǎn)單的辦法來(lái)實(shí)現(xiàn)強(qiáng)大的功能。為了簡(jiǎn)單、有效而又不失強(qiáng)大,造成了正則表達(dá)式規(guī)則的復(fù)雜,構(gòu)建正確、有效的正則表達(dá)式更是難度較大,所以需要付出一些努力才行。入門之后通過(guò)一定的參考和大量實(shí)踐,在開(kāi)發(fā)實(shí)踐中使用正則表達(dá)式還是比較有效且有趣的。

正則表達(dá)式中的常用術(shù)語(yǔ)

在學(xué)習(xí)正則表達(dá)式之前,先來(lái)了解一下正則表達(dá)式中幾個(gè)容易混淆的術(shù)語(yǔ),這對(duì)于學(xué)習(xí)正則表達(dá)式有很大的幫助。

1) grep

最初是 ED 編輯器中的一條命令,用來(lái)顯示文件中特定的內(nèi)容。后來(lái)成為一個(gè)獨(dú)立的工具 grep。

2) egrep

grep 雖然不斷地更新升級(jí),但仍然無(wú)法跟上技術(shù)的腳步。為此,貝爾實(shí)驗(yàn)室寫出了 egrep,意為“擴(kuò)展的 grep"。這大大增強(qiáng)了正則表達(dá)式的能力。

3) POSIX(Portable Operating System Interface of UNIX)

可移植操作系統(tǒng)接口。在 grep 發(fā)展的同時(shí),其他一些開(kāi)發(fā)人員也根據(jù)自己的喜好開(kāi)發(fā)出了具有獨(dú)特風(fēng)格的版本。但問(wèn)題也隨之而來(lái),有的程序支持某個(gè)元字符,而有的程序則不支持。因此,就有了POSIX。POSIX 是一系列標(biāo)準(zhǔn),確保了操作系統(tǒng)之間的移植性。不過(guò) POSIX 和 SQL 一樣,沒(méi)有成為最終的標(biāo)準(zhǔn)而只能作為一個(gè)參考。

4) Perl(Practical Extraction and Reporting Language)

實(shí)際抽取與匯報(bào)語(yǔ)言。1987 年,Larry Wall 發(fā)布了 Perl。在隨后的 7 年時(shí)間里,從 Perl1 到現(xiàn)在的 Perl5,最終成為了 POSIX 之后的另一個(gè)標(biāo)準(zhǔn)。

5) PCRE

Perl 的成功,讓其他的開(kāi)發(fā)人員在某種程度上要兼容"Perl",包括 C/C++、Java、Python 等都有自己的正則表達(dá)式。1997 年,Philip Hazel 開(kāi)發(fā)了 PCRE 庫(kù),這是兼容 Perl 正則表達(dá)式的一套正則引擎,其他開(kāi)發(fā)人員可以將 PCRE 整合到自己的語(yǔ)言中,為用戶提供豐富的正則功能。許多軟件都使用 PCRE,PHP 正是其中的一員。

正則表達(dá)式語(yǔ)法規(guī)則

在使用正則表達(dá)式之前我們一定要先來(lái)學(xué)習(xí)正則表達(dá)式的語(yǔ)法。正則表達(dá)式的構(gòu)成元素中一般包括普通字符、元字符、限定符、定位點(diǎn)、非打印字符和指定替換項(xiàng)等。

1) 普通字符

普通字符包括沒(méi)有顯式指定為元字符的所有可打印和不可打印字符,包括所有大小寫字母、數(shù)字、標(biāo)點(diǎn)符號(hào)和一些符號(hào)。最簡(jiǎn)單的正則表達(dá)式是用于搜索字符串相比較的單個(gè)普通字符。例如,單字符正則表達(dá)式
/A/會(huì)始終匹配字母 A。

也可以將多個(gè)單字符組合起來(lái)形成較長(zhǎng)的表達(dá)式,例如,正則表達(dá)式
/the/會(huì)匹配搜索字符串中的 the、there、other 和 over the lazy dog 等。無(wú)須使用任何串聯(lián)運(yùn)算符,只需連續(xù)輸入字符即可。

2) 元字符

除普通字符之外,正則表達(dá)式還可以包含“元字符”。元字符可分為單字符元字符和多字符元字符。例如,元字符
\d,它與數(shù)字字符相匹配。

下表中列出了所有的單字符元字符。

元字符 行為 示例
* 零次或多次匹配前面的字符或子表達(dá)式,等效于{0,} zo* 與 “z”和“zoo”匹配
+ 一次或多次匹配前面的字符或子表達(dá)式,等效于{1,} zo+ 與 “zo”和“zoo”匹配,但與“z”不匹配
? 零次或一次匹配前面的字符或子表達(dá)式,等效于{0,1}
當(dāng) ? 緊隨任何其他限定符(*、+、?、{n}、{n,} 或 {n,m})之后時(shí),匹配模式是非貪婪的。非貪婪模式匹配搜索到的、盡可能少的字符串,而默認(rèn)的貪婪模式匹配搜索到的、盡可能多的字符串
zo? 與“z”和“zo”匹配,但與“zoo”不匹配
o+? 只與“oooo”中的單個(gè)“o”匹配,而 o+ 與所有“o”匹配
do(es)? 與“do”或“does”中的“do”匹配
^ 匹配搜索字符串開(kāi)始的位置。如果標(biāo)志中包括 m(多行搜索)字符,^ 還將匹配 \n 或 \r 后面的位置。如果將 ^ 用作括號(hào)表達(dá)式中的第一個(gè)字符,就會(huì)對(duì)字符集取反 ^\d{3} 與搜索字符串開(kāi)始處的 3 個(gè)字符匹配
[^abc] 與除 a、b、c 以外的任何字符匹配
$ 匹配搜索字符串結(jié)束的位置。如果標(biāo)志中包括 m(多行搜索)字符,^ 還將匹配 \n 或 \r 前面的位置。 \d{3}$ 與搜索字符串結(jié)尾處的 3 個(gè)數(shù)字匹配
. 匹配除換行符 \n 之外的任何單個(gè)字符。若要匹配包括 \n 在內(nèi)的任意字符,請(qǐng)使用諸如 [\s\S] 之類的模式 a.c 與 “abc”“a1c”和“a-c”匹配
[] 標(biāo)記括號(hào)表達(dá)式的開(kāi)始和結(jié)尾 [1-4] 與“1”、“2”、“3”或“4”匹配
[^aAeEiIoOuU] 與任何非元音字符匹配
{} 標(biāo)記限定符表達(dá)式的開(kāi)始和結(jié)尾 a{2,3} 與“aa”和“aaa”匹配
() 標(biāo)記子表達(dá)式的開(kāi)始和結(jié)尾,可以保存子表達(dá)式,以備將來(lái)之用 A(\d) 與“A0”至“A9”匹配。保存該數(shù)字以備將來(lái)之用
| 指示兩個(gè)或多個(gè)項(xiàng)之間進(jìn)行選擇 z|food 與“z”或“food”匹配
(z|f)ood 與 “zood”或“food”匹配
/ 表示 JavaScript 中的文本正則表達(dá)式模式的開(kāi)始和結(jié)尾。在第二個(gè) “/”后添加單字符標(biāo)志可以指定搜索行為 /abc/gi 是與 “abc”匹配的 JavaScript 文本正則表達(dá)式。g(全局)標(biāo)志指定查找模式的所有匹配項(xiàng),i(忽略大小寫)標(biāo)志使搜索不區(qū)分大小寫
\ 將下一字符標(biāo)記為特殊字符、文本、反向引用或八進(jìn)制轉(zhuǎn)義符 \n 與換行符匹配。\( 與 “(”匹配。\\ 與 “\”匹配

這些特殊字符在括號(hào)表達(dá)式內(nèi)出現(xiàn)時(shí)就會(huì)失去它們的意義,變成普通字符。若要匹配這些特殊字符,必須首先轉(zhuǎn)義字符,即在字符前面加反斜杠
\。例如,若要搜索
+文本字符,則可使用表達(dá)式
\+。

除了以上單字符元字符外,還有一些多字符元字符,如下表所示。

元字符 行為 示例
\b 與一個(gè)字邊界匹配。即字與空格間的位置 er\b 與 “never”中的“er”匹配,但與“verb”中的“er”不匹配
\B 非邊界字匹配 er\B 與“verb”中的“er”匹配,但與“never”中的“er”不匹配
\d 數(shù)字字符匹配,等效于[0-9] 在搜索字符串“12 345”中,\d{2} 與“12”和“34”匹配。\d 與“1”,“2”、“3”、“4”和“5”匹配
\D 非數(shù)字字符匹配,等效于[^0-9] /D+ 與“abc123 def”中的“abc”和“def”匹配
\w 與 A-Z、a-z、0-9 和下劃線中的任意任意字符匹配,等效于[A-Za-z0-9] 在搜索字符串“The quick brown fox...”中,\w+ 與“The”、“quick”、“brown”和“fox”匹配
\W 與除 A-Z、a-z、0-9 和下劃線以外的任意字符匹配,等效于[^A-Za-z0-9] 在搜索字符串“The quick brown fox...”中,\W+ 與“...”和所有空格匹配
[xyz] 字符集,與任何一個(gè)指定字符匹配 [abc] 和 “plain”中的“a”匹配
[^xyz] 反向字符集,與未指定的任何字符匹配 [^abc] 與“plain”中的“p”、“1”、“i”和“n”匹配
[a-z] 字符范圍,匹配指定范圍內(nèi)的任何字符 [a-z] 與“a”到“z”范圍內(nèi)的任何小寫字母字符匹配
[^a-z] 反向字符范圍,與不在指定范圍內(nèi)的任何字符匹配 [^a-z] 與不在范圍“a”到“z”內(nèi)的任何字符匹配
{n} 正好匹配 n 次,n 是非負(fù)整數(shù) o{2} 與“Bob”中的“o”不匹配,但與“fooood”中的兩個(gè)“o”匹配
{n,} 至少匹配 n 次,n 是非負(fù)整數(shù)
* 與 {0,} 相等
+ 與 {1,} 相等
o{2} 與“Bob”中的“o”不匹配,但與“fooood”中的所有“o”匹配
{n,m} 匹配至少 n 次,至多 m 次。n 和 m 是非負(fù)整數(shù),其中 n<= m,逗號(hào)和數(shù)字之間不能有空格
? 與 {0,1} 相等
在搜索字符串“1234567”中,\d{1,3} 與“123”、“456”和“7”匹配
(模式) 與模式匹配并保存匹配項(xiàng)??梢詮挠?JavaScript 中的 exec Method 返回的數(shù)組元素中檢索保存的匹配項(xiàng)。若要匹配括號(hào)字符(),請(qǐng)使用“\(”或者“\)” (Chapter|Section) [1-9] 與 “Chapter 5”匹配,保存“Chapter”以備將來(lái)之用
(?:模式) 與模式匹配,但不保存匹配項(xiàng),即不會(huì)存儲(chǔ)匹配項(xiàng)以備將來(lái)之用。這對(duì)于用“or”字符(|)組合模式部件的情況很有用 industry(?:y|ies) 與 industry|industries 相等
(?=模式) 正預(yù)測(cè)先行。找到一個(gè)匹配項(xiàng)后,將在匹配文本之前開(kāi)始搜索下一個(gè)匹配項(xiàng)。不會(huì)保存匹配項(xiàng)以備將來(lái)之用 ^(?=_.*\d.{4,8}$ 對(duì)密碼應(yīng)用一下限制:
其長(zhǎng)度必須介于 4 到 8 字符之間,并且必須至少包含一個(gè)數(shù)字,在該模式中,*\d 查找后跟有數(shù)字的任意多個(gè)字符。對(duì)于搜索字符串“abc3qr”,與“abc3”匹配。
從該匹配項(xiàng)之前,(而不是之后)開(kāi)始,{4,8} 與包含 4~8 個(gè)字符的字符串匹配,與“abc3qr”匹配。
^ 和 $ 指定搜索字符串的開(kāi)始和結(jié)束位置,將在搜索字符串包含匹配字符之外的任何字符時(shí)阻止匹配
(?!模式) 負(fù)預(yù)測(cè)先行。匹配與模式不匹配的搜索字符串。找到一個(gè)匹配項(xiàng)后,將在匹配文本之前開(kāi)始搜索下一個(gè)匹配項(xiàng)。不會(huì)保存匹配項(xiàng)以備將來(lái)之用 \b(?!th)/w+\b 與不以“th”開(kāi)頭的單詞匹配在該模式中,\b 與一個(gè)字邊界匹配。對(duì)于搜索字符串“quick”,與第一個(gè)空格匹配。(?!th) 與非“th”字符串匹配與“qu”匹配,從該匹配項(xiàng)開(kāi)始,!w+ 與一個(gè)字匹配,即與“quick”匹配
\cx 匹配 x 指示的控制字符。x 的值必須在 A-Z 或 a-z 范圍內(nèi)。如果不是這樣,就假定 c 是文本“c”字符本身 \cM 與 Ctrl+M 或一個(gè)回車符匹配
\xn 匹配 n,此處的 n 是一個(gè)十六進(jìn)制轉(zhuǎn)義碼。十六進(jìn)制轉(zhuǎn)義碼必須正好是兩位數(shù)長(zhǎng)。允許在正則表達(dá)式中使用 ASCII 代碼 \x41 與“A”匹配、\x41 等效于后跟有“1”的“\x04”(因?yàn)?n 必須正好是兩位數(shù))
\num 匹配 num,此處的 num 是一個(gè)正整數(shù)。這是對(duì)以保存的匹配項(xiàng)的引用 (.)\1 與兩個(gè)連續(xù)的相同字符匹配
\n 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義碼或反向引用。如果 \n 前面至少有 n 個(gè)捕獲子表達(dá)式,那么 n 是反向引用;否則,如果 n 是八進(jìn)制數(shù)(0-7),那么 n 是八進(jìn)制轉(zhuǎn)義碼 (\d)\1 與兩個(gè)連續(xù)的相同數(shù)字匹配
\nm 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義碼或反向引用。如果 \nm 前面至少有 nm 個(gè)捕獲子表達(dá)式,那么 nm 是反向引用。如果 \nm 前面至少有 n 個(gè)捕獲子表達(dá)式,則 n 是反向引用,后面跟有文本 m。如果上述情況都不存在,當(dāng) n 和 m 是八進(jìn)制數(shù)字(0-7)時(shí),\nm 匹配八進(jìn)制轉(zhuǎn)義碼 nm \11 與制表符匹配
\nml 當(dāng) n 是八進(jìn)制數(shù)字(0-3)、m 和 1 是八進(jìn)制數(shù)字(0-7)時(shí),匹配八進(jìn)制轉(zhuǎn)義碼 nml \011 與制表符匹配
\un 匹配 n,其中 n 是以 4 位十進(jìn)制數(shù)字表示的 Unicode 字符 \u00A9 與版權(quán)符號(hào)(??)匹配

3) 非打印字符

非打印字符是由普通字符與轉(zhuǎn)義字符組成,用來(lái)在正則表達(dá)式中匹配特定行為的字符,如換行、換頁(yè)、空白符等。下表列出了非打印字符。

字符 匹配 等效于
\f 換頁(yè)符 \x0c 和 \cL
\n 換行符 \x0a 和 \cJ
\r 回車符 \x0d 和 \cM
\s 任何空白字符,包括空格、制表符和換頁(yè)符 [\f\b\r\t\v]
\S 任何非空白字符 [^\f\b\r\t\v]
\t Tab 字符 \x09 和 \cI
\v 垂直制表符 \x0b 和 \cK

4) 優(yōu)先級(jí)順序

在使用正則表達(dá)式時(shí),需要注意匹配的順序。通常相同優(yōu)先級(jí)是從左到右進(jìn)行運(yùn)算的,不同優(yōu)先級(jí)的運(yùn)算先高后低。各種操作符的匹配順序優(yōu)先級(jí)從高到低,如下表所示。

順序 元字符 描述
1 \ 轉(zhuǎn)義符
2 ( )、(?:)、(?=)、[ ] 括號(hào)和中括號(hào)
3 *、+、{n}、{n,}、{n,m} 限定符
4 ^、$、\ 任何元字符 定位點(diǎn)和序列
5 | 替換

另外,字符具有高于替換運(yùn)算符的優(yōu)先級(jí),例如,允許 "m|food" 匹配 "m" 或 "food"。

替換

正則表達(dá)式中的替換允許對(duì)兩個(gè)或多個(gè)替換選項(xiàng)之間的選擇進(jìn)行分組。實(shí)際上可以在模式中指定兩種匹配模式的或關(guān)系??梢允褂霉艿?br /> |字符指定兩個(gè)或多個(gè)替換選項(xiàng)之間的選擇,稱之為“替換”。匹配管道字符任一側(cè)最大的表達(dá)式。

例如:

/Chapter|Section [1-9][0-9]{0,1}/

該正則表達(dá)式匹配的是字符串“Chapter”或者字符串“Section”后跟一個(gè)或兩個(gè)數(shù)字。

如果搜索字符串是“Section 22”,那么該表達(dá)式匹配“Section 22”。但是,如果搜索字符串是“Chapter 22”,那么表達(dá)式匹配單詞“Chapter”,而不是匹配“Chapter 22”。

為了解決這種形式的表達(dá)式可能帶來(lái)的誤導(dǎo),可以使用括號(hào)來(lái)限制替換的范圍,即確保它只應(yīng)用于兩個(gè)單詞“Chapter”和“Section”??梢酝ㄟ^(guò)添加括號(hào)來(lái)使正則表達(dá)式匹配“Chapter 1”或“Section 3”。將以上表達(dá)式改成如下形式:

/(Chapter|Section) [1-9][0-9]{0,1}/

修改后,如果搜索字符串是“Section 22”,那么該表達(dá)式匹配“Section 22”。如果搜索字符串是“Chapter 22”,那么表達(dá)式匹配單詞也會(huì)是“Chapter 22”。

子表達(dá)式

正則表達(dá)式中放置括號(hào)可創(chuàng)建子表達(dá)式,子表達(dá)式允許匹配搜索文本中的模式并將匹配項(xiàng)分成多個(gè)單獨(dú)的子匹配項(xiàng),程序可檢索生成的子匹配項(xiàng)。

例如匹配郵箱賬號(hào)的正則表達(dá)式:

/(\w+)@(\w+)\.(\w+)/

該正則表達(dá)式包含 3 個(gè)子表達(dá)式,3 個(gè)子表達(dá)式分別進(jìn)行匹配并保留匹配結(jié)果,與其他表達(dá)式匹配結(jié)果作為一個(gè)整體顯示出來(lái)。

下面的示例將通用資源指示符(URI)分解為其組件:

/(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/

第一個(gè)括號(hào)子表達(dá)式保存 Web 地址的協(xié)議部分,匹配在冒號(hào)和兩個(gè)正斜杠前面的任何單詞。

第二個(gè)括號(hào)子表達(dá)式保存地址的域地址部分,匹配不包括左斜線
/或冒號(hào)
字符的任何字符序列。

第三個(gè)括號(hào)子表達(dá)式保存網(wǎng)站端口號(hào)(如果指定了的話),匹配冒號(hào)后面的零個(gè)或多個(gè)數(shù)字。

第四個(gè)括號(hào)子表達(dá)式保存 Web 地址指定的路徑和/或頁(yè)信息,匹配零個(gè)或多個(gè)數(shù)字字符
#或空白字符之外的字符。

如果我們使用這個(gè)正則表達(dá)式匹配字符串“http://msdn.microsoft.com:80/scripting/default.htm”,那么 3 個(gè)子表達(dá)式的匹配結(jié)果分別為 http、msdn.microsoft.com:80、/scripting/default.htm。

反向引用

反向引用用于查找重復(fù)字符組。此外,可使用反向引用來(lái)重新排列輸入字符串中各個(gè)元素的順序和位置,以重新設(shè)置輸入字符串的格式。

可以從正則表達(dá)式和替換字符串中引用子表達(dá)式。每個(gè)子表達(dá)式都由一個(gè)編號(hào)來(lái)標(biāo)識(shí),并稱作反向引用。

在正則表達(dá)式中,每個(gè)保存的子匹配項(xiàng)按照它們從左到右出現(xiàn)的順序存儲(chǔ)。用于存儲(chǔ)子匹配項(xiàng)的緩沖區(qū)編號(hào)從 1 開(kāi)始,最多可存儲(chǔ) 99 個(gè)子表達(dá)式。在正則表達(dá)式中,可以使用 \n 來(lái)訪問(wèn)每個(gè)緩沖區(qū),其中 n 標(biāo)識(shí)特定緩沖區(qū)的一位或兩位十進(jìn)制數(shù)字。

反向引用的一個(gè)應(yīng)用是,提供查找文本中兩個(gè)相同單詞的匹配項(xiàng)的能力。以下面的句子為例:

Is is the cost of of gasoline going up up?

該句子包含多個(gè)重復(fù)的單詞。如果能設(shè)計(jì)一種方法定位該句子,而不必查找每個(gè)單詞的重復(fù)出現(xiàn),就會(huì)很有用。

下面的正則表達(dá)式使用單個(gè)子表達(dá)式來(lái)實(shí)現(xiàn)這一點(diǎn):

/\b([a-z]+) \1\b/

在此情況下,子表達(dá)式是括在括號(hào)中的所有內(nèi)容。該子表達(dá)式包括由 [a-z]+ 指定的一個(gè)或多個(gè)字母字符。正則表達(dá)式的第二部分是對(duì)以前保存的子匹配項(xiàng)的引用,即單詞的第二個(gè)匹配項(xiàng)正好由括號(hào)表達(dá)式匹配。\1 用于指定第一個(gè)子匹配項(xiàng)。\b 單詞邊界元字符確保只檢測(cè)單獨(dú)的單詞。否則,諸如“is issued”或“this is”之類的詞組將不能正確地被此表達(dá)式識(shí)別。所以,使用表達(dá)式 /\b([a-z]+)\1\b/ 匹配字符串“Is is the cost of of gasoline going up up?”得到的結(jié)果為 is、of、up。

在 PHP 中使用正則表達(dá)式

PHP 有兩套函數(shù)庫(kù)支持的正則表達(dá)式處理操作:

  • 一套是由 PCRE(Perl Compatible Regular Expression)庫(kù)提供、與 Perl 語(yǔ)言兼容的正則表達(dá)式函數(shù),以preg_為函數(shù)的前綴名稱;
  • 另一套是 POSIX(Portable Operating System Interface)擴(kuò)展語(yǔ)法正則表達(dá)式函數(shù),以ereg_為函數(shù)的前綴。

兩套函數(shù)庫(kù)的功能相似,但是 PCRE 的執(zhí)行效率高于 POSIX,所以我們只介紹 PCRE 函數(shù)庫(kù)。


文章標(biāo)題:PHP正則表達(dá)式,看這一篇就夠了
當(dāng)前鏈接:http://m.5511xx.com/article/djsdepe.html