這篇文章主要介紹了php正則表達(dá)式指的是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇php正則表達(dá)式指的是什么文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
創(chuàng)新互聯(lián)主營(yíng)歷下網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app開(kāi)發(fā),歷下h5小程序定制開(kāi)發(fā)搭建,歷下網(wǎng)站營(yíng)銷(xiāo)推廣歡迎歷下等地區(qū)企業(yè)咨詢(xún)
在php中,正則表達(dá)式是描述字符排列模式的一種自定義語(yǔ)法規(guī)則,自身具有一套非常完整的、可以編寫(xiě)模式的語(yǔ)法體系,提供了一種靈活且直觀的字符串處理方法。正則表達(dá)式描述的是一種字符串匹配模式,可以用來(lái)檢查一個(gè)字符串中是否含有某種子串、將匹配的子串做替換或者從某個(gè)字符串中取出符合某個(gè)條件的子串等等。
什么是正則表達(dá)式
正則表達(dá)式也稱(chēng)為模式表達(dá)式,自身具有一套非常完整的、可以編寫(xiě)模式的語(yǔ)法體系,提供了一種靈活且直觀的字符串處理方法。正則表達(dá)式通過(guò)構(gòu)建具有特定規(guī)則的模式,與輸入的字符串信息比較,在特定的函數(shù)中使用從而實(shí)現(xiàn)字符串的匹配、查找、替換及分割等操作。
舉個(gè)我們?cè)谌粘I钪械睦樱绻胨阉麟娔X某個(gè)目錄下的所有 txt 格式的文件,就可以在該目錄下輸入*.txt,然后按回車(chē)鍵,就可以列出目錄下的所有 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)用戶(hù)提交一個(gè)表單后,要判斷輸入的電話(huà)號(hào)碼、E-mail 地址等是否有效,用普通的基于字面的字符驗(yàn)證顯然是不夠的。
正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱(chēng)為“元字符”)組成的文字模式。正則表達(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á)式更是難度較大,所以需要付出一些努力才行。入門(mén)之后通過(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)室寫(xiě)出了 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ǔ)言中,為用戶(hù)提供豐富的正則功能。許多軟件都使用 PCRE,PHP 正是其中的一員。
正則表達(dá)式語(yǔ)法規(guī)則
在使用正則表達(dá)式之前我們一定要先來(lái)學(xué)習(xí)正則表達(dá)式的語(yǔ)法。正則表達(dá)式的構(gòu)成元素中一般包括普通字符、元字符、限定符、定位點(diǎn)、非打印字符和指定替換項(xiàng)等。
1) 普通字符
普通字符包括沒(méi)有顯式指定為元字符的所有可打印和不可打印字符,包括所有大小寫(xiě)字母、數(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] 之類(lèi)的模式 | 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(忽略大小寫(xiě))標(biāo)志使搜索不區(qū)分大小寫(xiě) |
\ | 將下一字符標(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 和下劃線(xiàn)中的任意任意字符匹配,等效于[A-Za-z0-9] | 在搜索字符串“The quick brown fox...”中,\w+ 與“The”、“quick”、“brown”和“fox”匹配 |
\W | 與除 A-Z、a-z、0-9 和下劃線(xiàn)以外的任意字符匹配,等效于[^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)的任何小寫(xiě)字母字符匹配 |
[^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è)回車(chē)符匹配 |
\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 | 回車(chē)符 | \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)系??梢允褂霉艿纜字符指定兩個(gè)或多個(gè)替換選項(xiàng)之間的選擇,稱(chē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á)式保存地址的域地址部分,匹配不包括左斜線(xiàn)/或冒號(hào):字符的任何字符序列。
第三個(gè)括號(hào)子表達(dá)式保存網(wǎng)站端口號(hào)(如果指定了的話(huà)),匹配冒號(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í),并稱(chēng)作反向引用。
在正則表達(dá)式中,每個(gè)保存的子匹配項(xiàng)按照它們從左到右出現(xiàn)的順序存儲(chǔ)。用于存儲(chǔ)子匹配項(xiàng)的緩沖區(qū)編號(hào)從 1 開(kāi)始,最多可存儲(chǔ) 99 個(gè)子表達(dá)式。在正則表達(dá)式中,可以使用 \n 來(lái)訪(fǎng)問(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”之類(lèi)的詞組將不能正確地被此表達(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ù)的前綴名稱(chēng);
另一套是 POSIX(Portable Operating System Interface)擴(kuò)展語(yǔ)法正則表達(dá)式函數(shù),以ereg_為函數(shù)的前綴。
兩套函數(shù)庫(kù)的功能相似,但是 PCRE 的執(zhí)行效率高于 POSIX,所以我們只介紹 PCRE 函數(shù)庫(kù)。
關(guān)于“php正則表達(dá)式指的是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“php正則表達(dá)式指的是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。