正則表達(dá)式(php)

正則表達(dá)式描述了一種字符串歐匹配模式沐扳,通過這個(gè)模式在特定的函數(shù)中對(duì)字符串進(jìn)行匹配,查找织鲸,替換舔腾,分割等操作。

四部分組成
  • 原子
  • 元字符
  • 定界符
  • 模式修正符
定界符:

正則表達(dá)式通常都需要將模式表達(dá)式放入定界符之間搂擦。作為定界的字符稳诚,可以是除了字母,數(shù)字瀑踢,反斜線“\” 以外的任何字符扳还,通常使用“/”作為定界符才避,不過建議使用“#”。(不要問我什么氨距。桑逝。。)

原子:

正則表達(dá)式最基本的組成單位俏让,一個(gè)正則表達(dá)式中最少要有一個(gè)原子楞遏。可以將其詳細(xì)劃分為5類首昔。

1.普通字符作為原子

大小寫字母或者數(shù)字寡喝,如 0-9、az勒奇、AZ

2.一些特殊字符和元字符

任何一個(gè)符號(hào)都可以作為原子使用预鬓,比如!赊颠,@格二,等等。竣蹦。但是如這個(gè)符號(hào)在正則表達(dá)式中有特殊意義我們應(yīng)該使用“\”進(jìn)行轉(zhuǎn)義顶猜,像引號(hào),加號(hào)草添,星號(hào)等驶兜。應(yīng)該轉(zhuǎn)義為 " , ' , * , +

3.非打印字符

所謂非打印字符,是一些在字符串中的格式控制符號(hào)远寸,例如空格抄淑,回車,制表符等

4.使用“通用字符類型”作為原子

有時(shí)我們需要一個(gè)原子匹配一類字符
\d 等價(jià)于[0-9]
\D 和樓上相反
\s 匹配任意一個(gè)空白字符驰后,等價(jià)于[\f\n\r\t\v]
\S 和樓上相反
\w 匹配任意一個(gè)數(shù)字肆资,字母,下劃線灶芝,等價(jià)于[0-9a-zA-Z_]
\W 和樓上相反
. 匹配除了任意一個(gè)字符郑原,默認(rèn)情況下不包括換行符相當(dāng)于[^\n]

5.自定義原子表([])作為原子

使用原子表“[]”可以定義一組地位平等的原子,
且只能從中選擇一個(gè)原子進(jìn)行匹配
例如:

/[ajd]sp/      --可以匹配asp夜涕,jsp犯犁,dsp三個(gè)里面的任意一個(gè).
/[^ajd]sp/    --可以匹配除了 asp,jsp女器,dsp三種以外的任何字符串酸役,如xsp,nsp
元字符:

元字符不能單獨(dú)出現(xiàn),它必須用來修飾原子涣澡。
有以下幾種類型的元字符:

1.限定符

限定原子出現(xiàn)多少次才能滿足匹配贱呐。有六種限定符
“*”、表示任意次數(shù)
“+”入桂、表示一次或多次
“奄薇?”、表示0次或者1次
“{n}”抗愁、自定義n次
“{n,}”馁蒂、自定義n次以上
“{n,m}”、自定義n次到m次

2.邊界限制

限制字符串或者單詞的邊界范圍獲得更準(zhǔn)確的匹配結(jié)果
“^” 指字符串的開始
“$”指字符串的結(jié)束
“\b”描述字符串中的每個(gè)單詞的前或后邊界
“\B”表示非單詞邊界

3.模式選擇符(|)

“|”用來分割多選一的情況驹愚,優(yōu)先級(jí)最低

4.模式單元

模式單元是使用元字符“()”將多個(gè)原子組合成一個(gè)大原子远搪,當(dāng)成一個(gè)單元獨(dú)立使用

5.后向引用

使用元字符“()”標(biāo)記的開始和結(jié)束多個(gè)原子劣纲,不僅是一個(gè)獨(dú)立的單元逢捺,也是一個(gè)子表達(dá)式。這樣癞季,對(duì)一個(gè)正則表達(dá)式模式或部分模式兩邊添加圓括號(hào)將導(dǎo)致相關(guān)匹配儲(chǔ)存到一個(gè)臨時(shí)緩沖區(qū)劫瞳,可以被獲取以后使用。所捕獲的每個(gè)子匹配都按照正則表達(dá)式模式中從左至右所遇到的內(nèi)容儲(chǔ)存绷柒。儲(chǔ)存子匹配的緩沖區(qū)編號(hào)從1開始至99志于。每個(gè)緩沖區(qū)可以使用'\1'、‘\2’废睦、‘\3’這樣的形式進(jìn)行引用伺绽,當(dāng)然了,需要在前面加上一個(gè)反斜線轉(zhuǎn)義嗜湃,變成這樣‘\1’奈应、‘\2’、‘\3’购披。
舉個(gè)栗子:

'/^\d{4}\W\d{2}\W\d{2}/'      --這是一個(gè)匹配日期的格式杖挣,如2008-08/08 或2008/08-08
'/^\d{4}(\W)\d{2}\\1\d{2}/'   --這是一個(gè)匹配日期的格式,如2008-08-08 或2008-08-08

在第一個(gè)例子中我們可以發(fā)現(xiàn)兩個(gè)“\W”可以匹配任意特殊字符刚陡,兩者完全可以不是同一個(gè)特殊字符惩妇,
但在實(shí)際中我們要求日期間的特殊字符應(yīng)該一致,比如都是“-”或者都是“/”筐乳。
而第二個(gè)例子達(dá)到了這種效果歌殃,這是因?yàn)槟J健癨W”加上了元字符“()”,結(jié)果已經(jīng)被儲(chǔ)存在了緩沖區(qū),所以在第一個(gè)“\W”的位置使用“-”蝙云,則下一個(gè)位置使用“\1”引用時(shí)氓皱,匹配模式也必須是字符串“-”。
當(dāng)需要使用模式單元而又不想儲(chǔ)存匹配結(jié)果時(shí)贮懈,可以使用非捕獲元字符“匀泊?:”优训、“?=” 或 “各聘?揣非!”忽略對(duì)相關(guān)匹配的保存。在一些正則表達(dá)式中躲因,使用非儲(chǔ)存模式單元是必要的早敬,可以改變后向引用的順序。如下所示:

'/(windows)(linux)\\2OS/'    --使用“\2”再次引用第二個(gè)緩沖區(qū)中的字符串“l(fā)inux”
'/(?:windows)(linux)\\1OS/'  --使用“大脉?:” 忽略了第一個(gè)子表達(dá)式的儲(chǔ)存搞监,所以“\1”所引用的就是“l(fā)inux”   

》模式匹配的優(yōu)先級(jí)

使用正則表達(dá)式時(shí),需要注意匹配的順序镰矿,通常是優(yōu)先級(jí)從左到右進(jìn)行運(yùn)算琐驴,不同的優(yōu)先級(jí)的運(yùn)算先高后低。

如下表:

順序 元字符 描述
1 \ 轉(zhuǎn)義符號(hào)
2 ()秤标、(?:)绝淡、(?=)、[] 模式單元和原子表
3 *苍姜、+牢酵、?衙猪、{n}馍乙、{n,}、{n,m} 重復(fù)匹配
4 ^垫释、$丝格、\b、\B饶号、\A 铁追、\Z 邊界限制
5 I 模式選擇
模式修正符:

模式修正符在正則表達(dá)式定界符之外使用(最后一個(gè)斜線 ""之后)模式修正符可以調(diào)整正則表達(dá)式的解釋,擴(kuò)展了正則表達(dá)式在匹配茫船、替換等操作時(shí)的某些功能琅束,而且修正符可以組合使用,下列表格中算谈,列出了一些常用的模式修正符及其功能涩禀。

模式修正符 功能描述
i 匹配時(shí)不區(qū)分大小寫
m 將字符串視為多行
s 設(shè)定了此修正符 '.'將匹配所有的字符,包括換行符
x 模式中的空白忽略不計(jì)然眼,除非它已被轉(zhuǎn)義
e 只用在preg_replace()函數(shù)中艾船,在替換字符串中對(duì)逆向引用做正常替換,將其作為php代碼求職,并用其結(jié)果換來替換所搜索的字符串
U 本修正符反轉(zhuǎn)了匹配數(shù)量的值屿岂,使其不是默認(rèn)的重復(fù)践宴,而變成在后面跟上“?” 才變得重復(fù)
D 模式中的美元字符僅匹配目標(biāo)字符串的結(jié)尾爷怀。沒有此選項(xiàng)時(shí)阻肩,如果最后一個(gè)字符是換行符的話,美元符號(hào)也會(huì)匹配此字符之前运授。如果設(shè)定了m修正符忽略此選項(xiàng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烤惊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吁朦,更是在濱河造成了極大的恐慌柒室,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗宜,死亡現(xiàn)場離奇詭異雄右,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锦溪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門不脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來府怯,“玉大人刻诊,你說我怎么就攤上這事∥” “怎么了则涯?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冲簿。 經(jīng)常有香客問我粟判,道長,這世上最難降的妖魔是什么峦剔? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任档礁,我火速辦了婚禮,結(jié)果婚禮上吝沫,老公的妹妹穿的比我還像新娘呻澜。我一直安慰自己,他們只是感情好惨险,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布羹幸。 她就那樣靜靜地躺著,像睡著了一般辫愉。 火紅的嫁衣襯著肌膚如雪栅受。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音屏镊,去河邊找鬼依疼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛而芥,可吹牛的內(nèi)容都是我干的涛贯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔚出,長吁一口氣:“原來是場噩夢啊……” “哼弟翘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骄酗,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤稀余,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后趋翻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睛琳,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年踏烙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了师骗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讨惩,死狀恐怖辟癌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荐捻,我是刑警寧澤黍少,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站处面,受9級(jí)特大地震影響厂置,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魂角,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一昵济、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧野揪,春花似錦访忿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至平挑,卻和暖如春游添,著一層夾襖步出監(jiān)牢的瞬間系草,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工唆涝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留找都,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓廊酣,卻偏偏與公主長得像能耻,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亡驰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容