摘要:規(guī)范為的縮寫,中文即兼容正則表達(dá)式,由開發(fā)的庫,為很多現(xiàn)代工具所使用,大多數(shù)編程語言的正則表達(dá)式也都是集成該規(guī)范。接下來本文會對規(guī)范的正則表達(dá)式作出詳細(xì)介紹。正則語法分隔符當(dāng)使用函數(shù)的時候,模式需要由分隔符閉合包裹。
概述
正則表達(dá)式(Regular Expression)是一種字符匹配工具,通過構(gòu)建具有特定規(guī)則的模式,和輸入字符串?dāng)?shù)據(jù)進(jìn)行比較,然后進(jìn)行匹配、分割、替換等等的相關(guān)操作。它的設(shè)計思想是用一種描述性的語言來給字符串定義一個規(guī)則,凡是符合規(guī)則的字符串,我們就認(rèn)為它“匹配”了。
目前有兩種不同規(guī)范的正則表達(dá)式:
POSIX 規(guī)范:在兼容 POSIX 的 UNIX 系統(tǒng)上,grep 和 egrep 之類的工具都遵循 POSIX 規(guī)范,一些數(shù)據(jù)庫系統(tǒng)中的正則表達(dá)式也匹配 POSIX 規(guī)范。
PCRE 規(guī)范:為 Perl Compatible Regular Expressions 的縮寫,中文即 Perl 兼容正則表達(dá)式,由 Philip Hazel 開發(fā)的 Perl 庫,為很多現(xiàn)代工具所使用,大多數(shù)編程語言的正則表達(dá)式也都是集成該規(guī)范。
針對兩種不同的正則表達(dá)式規(guī)范,PHP 提供了兩組不同的函數(shù)庫,分別為 POSIX Regex 擴(kuò)展庫 和 PCRE 擴(kuò)展庫,每一個函數(shù)庫對應(yīng)于一種特定的正則表達(dá)式。
需要注意的是,從 PHP5.3.0 開始,POSIX Regex 擴(kuò)展將被廢棄,所有調(diào)用本擴(kuò)展中函數(shù)都將提示 E_DEPRECATED 錯誤。
接下來本文會對 PCRE 規(guī)范的正則表達(dá)式作出詳細(xì)介紹。
PCRE 正則語法 1. 分隔符當(dāng)使用 PCRE 函數(shù)的時候,模式需要由分隔符閉合包裹。分隔符可以使任意非字母數(shù)字、非反斜線、非空白字符。一般是使用斜線 / 作為定界符。
如果分隔符需要在模式內(nèi)進(jìn)行匹配,它必須使用反斜線進(jìn)行轉(zhuǎn)義。如果分隔符經(jīng)常在 模式內(nèi)出現(xiàn), 一個更好的選擇就是是用其他分隔符來提高可讀性。2. 原子
原子是正則表達(dá)式的最基本的組成單位,而且必須至少包含一個原子。常見的有:
. 匹配除換行符之外任意字符 d 匹配任意一個十進(jìn)制數(shù)字 D 匹配任意一個非十進(jìn)制字符 s 匹配一個不可見原子 S 匹配一個可見原子 w 匹配任意一個數(shù)字、字母或下劃線,同 `[a-zA-Z0-9_]` W 匹配任意非一個數(shù)字、字母或下劃線,同`[^a-zA-Z0-9_]` [] 作為一個原子,匹配 [] 之間的一個原子 [^] 作為一個原子,不能匹配 [] 之間的一個原子
PCRE 中有關(guān)原子和元字符的完整列表,請見 正則表達(dá)式。3. 元字符
元字符用來修飾原子的字符,不可以多帶帶出現(xiàn)。
//量詞 {n} 匹配原子恰好出現(xiàn)n次 {n,} 匹配原子出現(xiàn)不少于n次 {n,m} 匹配原子出現(xiàn)至少n次,最多m次 * 表示其前面的原子出現(xiàn)0至多次,相當(dāng)于{0,} + 表示前面的原子至少出現(xiàn)1次,相當(dāng)于{1,} ? 表示前面的原子出 0次或1次,相當(dāng)于{0,1} //邊界限制 ^ 指定匹配的字符串以什么原子開頭 $ 指定匹配的字符串以什么原子結(jié)尾 //模式選擇符 | 多選一 //模式單元 () 多原子作為一個大原子4. 模式修正符
位于整個模式的最后面,在整個正則表達(dá)式中優(yōu)先調(diào)用,是對正則表達(dá)式功能的擴(kuò)展。可以一次使用一個,每一個都具有一定的意義,也可以連續(xù)使用多個符號。
i //不區(qū)分大小寫 s //正則表達(dá)式中.匹配所有字符,包括換行符 U //匹配模式變?yōu)閼卸枘J?x //空白忽略PCRE 函數(shù)
函數(shù)名 | 說明 |
---|---|
preg_filter | 執(zhí)行一個正則表達(dá)式搜索和替換 |
preg_grep | 返回匹配模式的數(shù)組條目 |
preg_last_error | 返回最后一個PCRE正則執(zhí)行產(chǎn)生的錯誤代碼 |
preg_match_all | 執(zhí)行一個全局正則表達(dá)式匹配 |
preg_match | 執(zhí)行匹配正則表達(dá)式 |
preg_quote | 轉(zhuǎn)義正則表達(dá)式字符 |
preg_replace_callback_array | 執(zhí)行正則表達(dá)式搜索并使用回調(diào)進(jìn)行替換 |
preg_replace_callback | 執(zhí)行一個正則表達(dá)式搜索并且使用一個回調(diào)進(jìn)行替換 |
preg_replace | 執(zhí)行一個正則表達(dá)式的搜索和替換 |
preg_split | 通過一個正則表達(dá)式分隔字符串 |
// 匹配 $qq = "10001110@qq.com"; $pattern = "/^[1-9][0-9]{4,}$/"; if (preg_match($pattern, $email, $match)) { echo "匹配成功常用正則表達(dá)式
"; } else { echo "匹配失敗
"; } // 切割 $keywords = preg_split("/[s,]+/", "hypertext language, programming"); print_r($keywords); # Array ( [0] => hypertext [1] => language [2] => programming ) // 替換 $str = "foo o"; echo preg_replace("/ss+/", " ", $str); # "foo o" $count = 0; echo preg_replace(array("/d/", "/s/"), "*", "xp 4 to", -1 , $count); # xp***to echo $count; # 3
非空字符
$pattern = "/S+/";
手機(jī)號匹配
$pattern = "/^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])d{8}$/"; //匹配移動 $pattern = "^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])d{8}$"; //匹配聯(lián)通 $pattern = "^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])d{8}$"; //匹配電信 $pattern = "^1(3[3]|4[9]|53|7[037]|8[019])d{8}$";
E-mail 匹配
$pattern = "/^(w)+(.w+)*@(w)+(.w+)+$/";
URL 匹配
$pattern = "/^https?:////(w+.)+[a-z]+$/";
IP 地址匹配
$pattern = "/((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))/";
身份證號匹配
$pattern = "/(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/";
中國郵政編碼匹配
$pattern = "/^[1-9]d{5}(?!d)$/";
HTML 標(biāo)簽匹配
$pattern = "/^<([a-z]+)([^<]+)(?:>(.)1>|s+/>)$/";
中文匹配
$pattern = "/^[x{4e00}-x{9fa5}]+$/u";
注:PHP 中使用 x 表示十六進(jìn)制數(shù)據(jù)。
日期匹配
$pattern1 = "/^d{4}-d{1,2}-d{1,2}$/"; # 2018-04-27 $pattern2 = "/^(0?[1-9]|1[0-2])$/"; # 月份(01~09和1~12) $pattern3 = "/^((0?[1-9])|((1|2)[0-9])|30|31)$/"; # 日期(01~09和1~31)
以上內(nèi)容整理自網(wǎng)絡(luò),參考文章:
正則表達(dá)式
PCRE
PHP正則表達(dá)式
PHP高級特性一之正則表達(dá)式用法
常用正則表達(dá)式
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28689.html
摘要:兼容的正則表達(dá)式已經(jīng)實現(xiàn)了很多使用不同解析引擎的正則函數(shù)。中主要有兩個正則解析器一個稱為,另一個稱為兼容正則表達(dá)式。在中,每個正則表達(dá)式模式都是使用符合格式的字符串。 原文鏈接: Getting Started with PHP Regular Expressions Last-Modified: 2019年5月10日16:23:19譯者注: 本文是面向0正則基礎(chǔ)的phper, 很多...
摘要:正則表達(dá)式的都是匹配和替換搜索正則表達(dá)式要匹配的字符串匹配到的字符串匹配到的個數(shù),沒有匹配到返回下面是例子執(zhí)行一個正則表達(dá)式匹配,非貪婪執(zhí)行一個全局正則表達(dá)式匹配,貪婪執(zhí)行結(jié)果匹配所有僅由有一個單詞組成的科目名輸出結(jié)果替換正則表達(dá)式要匹 正則表達(dá)式的都是匹配和替換 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...
摘要:正則表達(dá)式的都是匹配和替換搜索正則表達(dá)式要匹配的字符串匹配到的字符串匹配到的個數(shù),沒有匹配到返回下面是例子執(zhí)行一個正則表達(dá)式匹配,非貪婪執(zhí)行一個全局正則表達(dá)式匹配,貪婪執(zhí)行結(jié)果匹配所有僅由有一個單詞組成的科目名輸出結(jié)果替換正則表達(dá)式要匹 正則表達(dá)式的都是匹配和替換 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...
摘要:在閱讀這篇文章前最好把同系列文章實戰(zhàn)正則表達(dá)式一驗證手機(jī)號先仔細(xì)閱讀一遍。但實際上這樣一個表達(dá)式是無法從上面的中提取第一個元素的這里主要的問題是在默認(rèn)情況下點號字符無法匹配換行符。但是很遺憾,正則表達(dá)式中沒有排除型子表達(dá)式或者說排除型分組。 這篇文章通過提取html元素介紹了正則表達(dá)式中模式修飾符、貪婪匹配與非貪婪匹配、Unicode模式、環(huán)視等知識點。在閱讀這篇文章前最好把同系列文章...
摘要:正則表達(dá)式是什么是一種字符串處理的工具搜索匹配搜索替換搜索分割功能強(qiáng)大是一種規(guī)則正則表達(dá)式應(yīng)用范圍數(shù)據(jù)驗證數(shù)據(jù)處理過濾數(shù)據(jù)查詢各語言都支持正則表達(dá)式相關(guān)函數(shù)正則表達(dá)式一個匹配返回匹配結(jié)果的次數(shù)執(zhí)行一個全局正則表達(dá)式匹配返回匹配結(jié)果的次數(shù) 正則表達(dá)式是什么 是一種字符串處理的工具(搜索匹配、搜索替換、搜索分割) 功能強(qiáng)大,是一種規(guī)則 正則表達(dá)式應(yīng)用范圍 數(shù)據(jù)驗證 數(shù)據(jù)處理/過濾 數(shù)...
閱讀 2017·2021-11-24 09:39
閱讀 1155·2021-09-10 11:25
閱讀 1782·2021-09-08 10:42
閱讀 3751·2021-09-06 15:00
閱讀 2506·2019-08-30 15:54
閱讀 3122·2019-08-29 17:08
閱讀 3282·2019-08-29 11:26
閱讀 2848·2019-08-28 18:27