
html' target='_blank'>正則表達(dá)式語言由兩種基本字符類型組成:原義(正常)文本字符和元字符。
元字符使用正則表達(dá)式具有處理能力。元字符既可以是放在[ ] 中的任意單個(gè)字符(如 [a]表示匹配單個(gè)小寫字符 a),也可以是字符序列(如 [a-d] 表示匹配 a 、b、 c、 d 之間的任意一個(gè)字符,而 /w 表示任意英文字母和數(shù)字及下劃線),常見的元字符如下:
| 字符 | 描述 | 特別說明 | . | 匹配除換行符(/n)以外的任意字符 | ~ | [abcde] | 匹配 a b c d e 之中的任意一個(gè)字符 | 所有字符是 或 的關(guān)系 | [a-h] | 匹配 a到h之間的任意一個(gè)字符 | ~ | [^fgh] | 不與 fgh之中的任意一個(gè)字符匹配 | 在 中括號[ ] 的第一個(gè)字符前加上 ^ 表示 取反 不匹配中括號里面出現(xiàn)的任意字符 | /w | 匹配大小寫英文字符及數(shù)字 0 到 9 之間的任意一個(gè)及下劃線,相當(dāng)于[a-zA-Z0-9_] | ~ | /W | 與 /w 相反,相當(dāng)于 [^a-zA-Z0-9_] | ~ | /s | 匹配任意的空白符,相當(dāng)于 [/f/n/r/t/v] | ~ | /S | 與 /s相反,相當(dāng)于 [^/s] | ~ | /d | 匹配任何 0 到 9 之間的單個(gè)數(shù)字,相當(dāng)于 [0-9] | ~ | /D | 與 /d 相反,相當(dāng)于[^0-9] | ~ | [/u4e00-/u9fa5] | 匹配任意單個(gè)漢字(中文)(這里用的是 Unicode 編碼表示的漢字) | ~ | /b | 匹配單詞的開始或結(jié)束 | ~ | ^ | 匹配字符串的開始 | 放在中括號的第一個(gè)字符前 則變?yōu)?取反的意思 | $ | 匹配字符串的結(jié)束 | ~ |
|---|
作用:限定這個(gè)符號前面 一個(gè) 單元 多出現(xiàn)的次數(shù)
單元:
上面的元字符都是針對單個(gè)字符匹配的,要想同時(shí)匹配多個(gè)字符的話,還需要借助限定符,下面是一些常見的限定符(下表中 n 和 m 都是表示 整數(shù)。)
| 字符 | 描述 | 特別說明 | * | 匹配 0 到 多 個(gè)元字符,相當(dāng)于 {0,} | ~ | ? | 匹配 0 到 1 個(gè)元字符, 相當(dāng)于 {0,1} | ~ | + | 匹配至少 1 個(gè)元字符,相當(dāng)于 {1,} | ~ | {n} | 匹配 n 個(gè)元字符 | ~ | {n,} | 匹配至少 n 個(gè)元字符 | ~ | {n,m} | 匹配 n 到 m 個(gè)元字符 | ~ | /b | 匹配單詞邊界 | ~ | ^ | 字符串必須以指定的字符開始 | ~ | $ | 字符串必須以指定的字符結(jié)束 | ~ |
|---|
分組,比如 ^(13)[4-9]/d{8}$ 表示任意以 13 開頭的移動手機(jī)號碼。abcabcabc+ 表示 最后的字母 c 出現(xiàn) 1 次或 多次;(abcabcabc)+ 表示 整個(gè)字符串 abcabcabc 出現(xiàn) 1 次或 多次。| 來表示 或 的關(guān)系,例如 z|j|q 表示匹配 z 、j、q 之中的任意一個(gè)字母。其實(shí)等價(jià)于 [zjq]。ab|cd|ef 表示的是:要么是 ab、要么是 cd要么是 ef。a(b|cd|e)f 表示的是:以a開頭,要么是 b、要么是 cd要么是 e,最后以f結(jié)尾。|(或) 的唯一邊界是 小括號(( ))[0-9A-Z.?] 這個(gè)正則你如何理解?. 和 ? 出現(xiàn)在中括號中時(shí),. 和 ? 將變?yōu)?普通字符,它就是 點(diǎn) 和 問號。你可以理解為 [ ] 的優(yōu)先級要大于. 和 ? 的優(yōu)先級。?aaa.bbb ,記住這里 . 和 ? 被完全當(dāng)做了普通字符。多選結(jié)構(gòu)其實(shí)就是元字符 | (或)的使用。
界定范圍:開頭、結(jié)尾、小括號
| 正則 | 含義 | Windows98|Windows2000|WindowsXP | 匹配Windows98或者Windows2000或者WindowsXP | ^Windows98|Windows2000|WindowsXP$ | 以Windows98開頭或者包含Windows2000或者以WindowsXP結(jié)尾 注意 ^和$都包含在|的范圍內(nèi),因?yàn)?code>|的界限只有:開頭、結(jié)尾、小括號 | Windows(98|2000|XP) | Windows然后98 或者2000或者XP |
|---|
總結(jié):多選結(jié)構(gòu)可以包括很多字符,但不能超越 括號 的界限。
(/d{1,3}/.){3}/d{1,3} 簡單的 IP 地址匹配表達(dá)式((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)左括號為標(biāo)志,從左向右,第一個(gè)分組的組號為 1 ,第二個(gè)為 2 ,依次類推。示例:
/b(/w+)/b/s+/1/b 可以用來匹配重復(fù)的單詞where where go, tom tom happy直白解釋:
正則表達(dá)式中,前面用小括號進(jìn)行劃分(分組),后面把小括號匹配到的內(nèi)容引用到后面來,分別用/1、/2等 來表示。(第一個(gè)小括號極/1...)。如果存在 小括號嵌套小括號的情況 (/w+(.?)) 記住:這個(gè)時(shí)候要以 ( 為標(biāo)志 從左往右 數(shù)小括號就可以了。
/b、^、$ 那樣。環(huán)視不會占用字符。(?=exp) 位置的后面能匹配 exp。例如:(?=/d) 當(dāng)前位置右邊是數(shù)字。(?!exp) 位置的后面不能匹配 exp。例如:(?!/d) 當(dāng)前位置右邊不是數(shù)字。(?<=exp) 位置的前面能匹配 exp。例如:(?<=/d) 當(dāng)前位置左邊是數(shù)字(?<!exp) 位置的前面不能匹配 exp。例如:(?!/d) 當(dāng)前位置左邊不是數(shù)字。+、*、{3,12} 等)時(shí), 通常的行為是匹配盡可能多的字符。a.*b,它將會匹配最長的以 a 開始,以 b 結(jié)束的字符串。如果用它來搜索 aabab 的話,它會匹配整個(gè)字符串 aabab,這被稱為 -------貪婪匹配? 。這樣 .*? 就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè) 匹配成功的前提下使用最少的重復(fù)。a.*?b 匹配最短的,以 a 開始, 以 b 結(jié)束的字符串。如果把它應(yīng)用于 aabab 的話,它會匹配 aab 和 ab。總結(jié):
高級5 - 模式匹配的優(yōu)先級貪婪與懶惰模式之間的區(qū)別就在于:懶惰模式 在量詞
*的后面多了一個(gè) 問號?。
在使用正則表達(dá)式時(shí),需要注意匹配的順序。通常相同優(yōu)先級 從左到右 進(jìn)行計(jì)算,不同優(yōu)先級的運(yùn)算 先高后低。各種操作符的匹配順序優(yōu)先級 從高到低 如下表所示。
| 順序 | 元字符 | 描述 | 1 | / | 轉(zhuǎn)義字符 | 2 | ()、(?:)、(?=)、[] | 模式單元和原子表 | 3 | *、+、?、{n}、{n,}、{n,m} | 重復(fù)匹配 | 4 | ^、$、/b、/B、/A、/Z | 邊界限制 | 5 | | | 模式選擇 |
|---|
1問:要匹配字符串 333333/$33/33333 中的 /$ 正則應(yīng)該怎么寫?
2問:如果在 PHP 中 preg_match 函數(shù)分別用單引號和雙引號的表達(dá)式來匹配上面的 /$,怎么寫?
答案:
///$'///////$/'。(為方便查看我們拆分一下為 '/// // // $/')"////////$/"。(為方便查看我們拆分一下為 "/// // // /$/")再答:
/ ,所以我們需要 6個(gè)/ 來生成表達(dá)式。雙引號除了轉(zhuǎn)義 / 以外,還需要多一個(gè) / 用來轉(zhuǎn)義 $ 所以它 需要 7 個(gè)/。
相關(guān)教程推薦:PHP視頻教程
以上就是詳解正則表達(dá)式的詳細(xì)內(nèi)容,更多請關(guān)注 其它相關(guān)文章!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答