PHP正則表達(dá)式核心技術(shù)完全詳解 第1節(jié)

極客小俊
?一個(gè)專注于web技術(shù)的80后
你不用拼過聰明人,你只需要拼過那些懶人 你就一定會(huì)超越大部分人!


正則表達(dá)式在字符串處理中的應(yīng)用(一) php正則表達(dá)式的介紹:
正則表達(dá)式: 就是描述字符串排列模式的一種自定義語法規(guī)則、也是用于描述字符串排列 或 匹配模式的一種語法規(guī)則、
正則表達(dá)式: 就是用于描述字符串排列 或 匹配模式的一種語法規(guī)則、
它主要用于字符串的: 分割字符串、查找字符串、替換字符串 的一系列操作
在php中 正則表達(dá)式一般是由一些特殊字符聯(lián)合構(gòu)成的一個(gè)文本模式描述
如果可以使用字符串處理函數(shù)完成的任務(wù),就不要使用正則, 性能相關(guān)、但是有一些復(fù)雜的操作只能使用正則完成
正則表達(dá)式不單獨(dú)屬于某一個(gè)語言、它是可以在很多計(jì)算機(jī)語言中應(yīng)用: php、java、c++..都通用
正則表達(dá)式也稱為一種模式表達(dá)式。
正則表達(dá)式就是通過構(gòu)建具有特定規(guī)則的模式,與輸入的字符信息比較,再進(jìn)行分割、匹配、查找、替換等工作
php正則表達(dá)式快速入門小案例如下: "/<img\ssrc=".?"\/>/"
以上正則表達(dá)式結(jié)構(gòu)的特點(diǎn)分析: 一、 正則表達(dá)式也是一個(gè)字符串 二、具有特殊意義的字符組成的字符串 三、具有一定的編寫規(guī)則,也可以看作是一種模式 四、也可以看作是一種編程語言(是用一些特殊字符,按規(guī)則編寫出一個(gè)字符串,形成一種模式---正則表達(dá)式)
注意:在php中、如果正則表達(dá)式,不和函數(shù)一起使用,則它就是一個(gè)字符串,如果將正則 表達(dá)式放到到某個(gè)函數(shù)中使用, 才能發(fā)揮出正則表達(dá)式的作用。 用到分割函數(shù)中,就可以用這個(gè)正則去分割字符串
先寫一個(gè)php正則表達(dá)式小案例 : 模式驗(yàn)證
?$pattren="/[^0-9]/";
?$string="07896984666#659875454";
?if(preg_match($pattren,$string,$matches)){
? ? ?echo "正則表達(dá)式<b>{$pattren}</b> 和字符串 <b>{$string}</b> 匹配成功,匹配結(jié)果如下";
? ? ?show($matches);
?}else{
? ? ?echo "<font color='read'>正則表達(dá)式<b>{$pattren}</b> 和字符串 <b>{$string}</b> 匹配失敗</font>";
?}
國外在線測(cè)試正則表達(dá)式地址: https://regex101.com/ https://www.regexpal.com/ 正則表達(dá)式在php手冊(cè)中位置如下: ?

在PHP中給我們提供兩套正則表達(dá)式函數(shù)庫 POSIX 擴(kuò)展正則表達(dá)式 ? ? ? ereg_ 開頭的函數(shù) ?[這種在PHP5.3以后被廢除了] PCRE 正則表達(dá)式(兼容 Perl) ? preg_ 開頭的函數(shù) [推薦] 兩種函數(shù)庫功能一樣 注意:推薦使用正則表達(dá)式(兼容 Perl) 函數(shù)庫. 手冊(cè)位置如下圖: ?

學(xué)習(xí)php正則表達(dá)式時(shí),有兩方面需要學(xué)習(xí): 一、正則表達(dá)式的模式如何編寫 二、學(xué)習(xí)正則表達(dá)式的強(qiáng)大處理函數(shù)
php正則表達(dá)式的模式如何編寫 正則表達(dá)式的組成部分
定界符 ?// 為默認(rèn)定界符號(hào) (有一些語言是不需要這個(gè)定界符號(hào))這也被叫做:界定符! 除了字母、數(shù)字和正斜線\ 以外的任何字符都可以為定界符號(hào),進(jìn)過測(cè)試以下都是可以的 ?| | ? ? ?例如: |<img\ssrc=".?"\/>| ?// ? ? ?例如: /<img\ssrc=".?"\/>/ ?{ } ? ?例如: {<img\ssrc=".?"\/>} ?! ! 例如: !<img\ssrc=".?"\/>!
例如: #<img\ssrc=".?"\/># 但是沒有特殊需要,我們都使用正斜線 // 作為正則表達(dá)式的定界符號(hào)!
原子: 是正則表達(dá)式的最基本組成單位,而且正則至少要包含一個(gè)原子、普通字符是編寫正則表達(dá)式時(shí)最常見的原子了,包括所有的大寫和小寫字母字符、所有數(shù)字等。例如,a-z、A-Z、0-9 或者單獨(dú)使用的字符,就是原子、所有打?。ㄋ锌梢栽谄聊簧陷敵龅淖址┖头谴蛴∽址床坏降模┒伎梢允窃?、例如:空格、換行等等... ① 普通字符作為原子 /5/ 用于匹配字符串中是否有5這個(gè)字符出現(xiàn) /php/ 用于匹配字符串中是否有PHP字符串出現(xiàn) / ?/ 匹配空字符串 ② 一些特殊字符和量詞作為原子 .、*、+、\?、 (、 <、>、\/、用有意義的字符作為原子來使用,必須使用 ”\“轉(zhuǎn)義字符轉(zhuǎn)義 " \ " 轉(zhuǎn)義字符可以將有意的字符轉(zhuǎn)成沒意義的字符 所以任何一個(gè)符號(hào)都可以作為原子使用,但如果這個(gè)符號(hào)在正則表達(dá)式中有一些特殊意義,我們就必須使用轉(zhuǎn)義字符“\”取消它的特殊意義,將其變成一個(gè)普通的原子。例如,所有標(biāo)點(diǎn)符號(hào)以及一些其他符號(hào),雙引號(hào)””、單引號(hào)' 、“*”、“+”、“.”等,如果當(dāng)原子就必須像\”、\’、+ 和 . 這樣使用。 例如 . ?在正則中表示任意一個(gè)字符, [包括 . 在內(nèi)] ? 那么只匹配一個(gè)字符 如果作為原子來光匹配 . 的話 就要轉(zhuǎn)義 如下 ‘/./’ ? ? ? ? ? 用于匹配字符串中是否有英文的“.”出現(xiàn) ? '/<br\/>/’用于匹配字符串中是否有HTML的 標(biāo)記字符串出現(xiàn)
轉(zhuǎn)義字符: 如果你要使用正則表達(dá)式中的一些特殊符號(hào)來作為原子進(jìn)行匹配 就必須轉(zhuǎn)義例如: \ 、 . ?、\/、 \、[ 、]、 等等... (匹配與特殊字符同名的普通字符,需要在前面加 \,把特殊字符轉(zhuǎn)義為普通字符。) 正則表達(dá)式中 使用特殊字符例如 正斜杠/ 、問號(hào)? 都是需要使用\來轉(zhuǎn)義的 ? 例如: $ptn='/http:\/\//'; ?匹配: http://
小提示: 寫正則表達(dá)式的時(shí)候最好是使用單引號(hào)進(jìn)行書寫!
在正則表達(dá)式中可以直接使用一些 [元字符] 代表范圍的原子 意思就是還有一些英文字母加上了 ‘\’ 反斜杠后、可以將沒意義的英文字母轉(zhuǎn)為有意義的[元字符]: 如下所示 ?\d ?: 表示任意一個(gè)十進(jìn)制的數(shù)字 ? ? ?等同于: ?[0-9] ?\D ?: 表示任意一個(gè)除數(shù)字這外的字符 ?等同于: ?0-9 ?\s ?: 表示任意一個(gè)空白字符,空格、\n\r\t\f ?等同于: ?[\n\r\t\f] ?\S ?: 表示任意一個(gè)非空白 ? ? ? ? ? ? ? ? ? 等同于: ?\n\r\t\f ?\w ?: 表示任意一個(gè)字 a-z、A-Z、0-9 _ ? ? ? 等同于: ?[a-zA-Z0-9] ?\W ?: 表示任意一個(gè)非字, 除了a-zA-Z0-9以外的任意一個(gè)字符 所以 \W ?等同于: ?a-zA-Z0-9_ ?意思就是非字母 數(shù)字 下劃線 以外的任意一個(gè)字符 ?4. 自定義一個(gè)原子表[], 可以匹配方括號(hào)中的任何一個(gè)原子字符 ?[a-z5-8] ?a-z 表示取反, 就是除了原子表中的原子,都可以表示 注意: ( ^必須在[]內(nèi)的第一個(gè)字符處出現(xiàn) ). ? 小結(jié): ?[ ] ? 它里面的任意一個(gè)字符 abc ?它里面除了abc的任意一個(gè)字符
如果喜歡話請(qǐng) 點(diǎn)贊 ?投幣 ?收藏 一鍵三連 ?
大家的支持就是我堅(jiān)持下去的動(dòng)力!
不要忘了?? 關(guān)注 ??哦!
