您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“PHP的正則表達(dá)式基礎(chǔ)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
正則表達(dá)式準(zhǔn)確來(lái)講是對(duì)字符串進(jìn)行操作的一種邏輯公式,也就是用一開(kāi)始定義好的一些特定的字符還有這些特定字符的組合,組成了一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”其實(shí)就是用來(lái)過(guò)濾字符串的??梢岳斫鉃槲覀?cè)诘顷懹脩舻臅r(shí)候有時(shí)會(huì)要填寫驗(yàn)證碼或者電話之類的這些特定的數(shù)據(jù),這時(shí)候就要用到正則表達(dá)式。
正則表達(dá)式雖然看起來(lái)復(fù)雜,其實(shí)并不難,那接下來(lái)我們一起來(lái)看一看吧。
正則表達(dá)式的定界符
首先我們要學(xué)習(xí)的就是正則表達(dá)式的定界符,顧名思義,定界符就是確定正則表達(dá)式邊界的符號(hào),定一個(gè)邊界,邊界以內(nèi)就是正則表達(dá)式。同時(shí)正則表達(dá)式的定界符有規(guī)定:
定界符,不能使用a-zA-Z0-9\ 除此以外都可以使用。并且必須成對(duì)出現(xiàn),有開(kāi)始就有結(jié)束。
示例如下:
$正則表達(dá)式$ %正則表達(dá)式% /正則表達(dá)式/
其中我們需要注意的是/
是轉(zhuǎn)義字符,當(dāng)我們正則中需要匹配/的時(shí)候,可以使用\轉(zhuǎn)義一下。如果覺(jué)得麻煩的話,可以直接使用其他的定界符比如:
$/$
正則表達(dá)式的原子
正則表達(dá)式的原子是正則表達(dá)式里的最小單位,也就是我們需要匹配的內(nèi)容,在我們成立的整形額表達(dá)式中,最少也要有一個(gè)原子。
其實(shí)可以理解為,所有可見(jiàn)的不可見(jiàn)的字符都是原子,比如空格、回車、換行、0-9、標(biāo)點(diǎn)符號(hào)、A-Za-z、中文這些都是原子。
preg_match() 函數(shù)
在詳細(xì)的講原子之前,我們要先了解一下一個(gè)函數(shù),那就是preg_match
PHP 中的 preg_match() 函數(shù)可以根據(jù)定義的正則表達(dá)式對(duì)字符串進(jìn)行搜索以及匹配。
語(yǔ)法格式如下:
preg_match ( string $正則 , string $字符串 [, array &$結(jié)果] )
根據(jù)$正則也就是我們定義的正則表達(dá)式,在匹配$字符串,如果存在則返回匹配個(gè)數(shù),然后把匹配的結(jié)果放在$結(jié)果里。如果沒(méi)有匹配到結(jié)果那就返回0。
我們通過(guò)示例來(lái)看一下:
<?php //定義一個(gè)變量叫a,作為我們定義的正則表達(dá)式。 $a = '/a/'; $b = 'abbcccddddeeeee'; if(preg_match($a, $b, $c)){ echo '匹配到了,結(jié)果為:'; var_dump($c); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
由上述示例可以看出,我們定義了變量a,希望能夠匹配的是a,正好在$b中存在a,通過(guò)if else語(yǔ)句輸出成功了。
再來(lái)一個(gè)示例:
<?php //定義一個(gè)變量叫a,作為我們定義的正則表達(dá)式。 $a = '/fff/'; $b = 'abbcccddddeeeee'; if(preg_match($a, $b, $c)){ echo '匹配到了,結(jié)果為:'; var_dump($c); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
上述示例中,希望匹配到字符串,但是$b中不存在,所以沒(méi)有匹配成功,通過(guò)if else語(yǔ)句輸出為匹配成功。
知道了preg_match() 函數(shù)的基本用法之后我們可以和特殊標(biāo)識(shí)的原子結(jié)合起來(lái)使用。
特殊標(biāo)識(shí)的原子
\d
---匹配一個(gè)0-9
\D
---除了0-9以外的所有字符
\w
---a-zA-Z0-9_
\W-
--除了0-9A-Za-z_以外的所有字符
\s
---匹配所有空白字符\n \t \r 空格
\S
---匹配所有非空白字符
[ ]
---指定范圍的原子
它們的具體用法給大家舉個(gè)例子就明白了:
<?php $a = '/\d/'; $b = '人生自古誰(shuí)無(wú)4'; if(preg_match($a, $b, $c)){ echo '匹配到了,結(jié)果為:'; var_dump($c); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
在上述示例中,特殊標(biāo)識(shí)的原子\d表示的就是0-9的數(shù)字,那么在需要匹配的$b中存在一個(gè)4,所以匹配成功。
<?php $a = '/\w/'; $b = '人生自古誰(shuí)無(wú)死'; if(preg_match($a, $b, $c)){ echo '匹配到了,結(jié)果為:'; var_dump($c); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
在上述實(shí)例中,特殊標(biāo)識(shí)的原子\w表示的是a-zA-Z0-9_ ,在變量b中沒(méi)有相應(yīng)的元素,所以輸出結(jié)果為未匹配到。
其中還有一個(gè)[^]
字符表示不匹配指定區(qū)間的字符。
示例如下:
<?php $a = '/[^0-9A-Za-z_]/'; $b = 'abbccc122333'; if(preg_match($a, $b, $c)){ echo '匹配到了,結(jié)果為:'; var_dump($c); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
通過(guò)[^]字符匹配除0-9A-Za-z_以外的字符,未匹配到。
總結(jié)一下:
\w
---[a-zA-Z0-9_]
\W
---[^a-zA-Z0-9_]
\d
---[0-9]
\D
---[^0-9]
\s
---[ \t\n\f\r]
\S
---[^ \t\n\f\r]
正則表達(dá)式的元字符
在上面的示例中,我們能夠看出通過(guò)匹配的話,只能匹配一個(gè)字符,但是在我們的日常使用中,通常會(huì)匹配多個(gè)字符,那這時(shí)候只通過(guò)我們的原子就不能達(dá)到我們的目的。就需要通過(guò)元字符來(lái)幫我們修飾原子,實(shí)現(xiàn)更多的功能。
*
---代表匹配前面的一個(gè)原子,匹配0次或者任意多次前面的字符。
+---匹配一次或多次前面的一個(gè)字符
?
---前面的字符可有可無(wú)【可選】 有或沒(méi)有
.
---更標(biāo)準(zhǔn)一些應(yīng)該把點(diǎn)算作原子。匹配除了\n以外的所有字符 或者。注:它的優(yōu)先級(jí)最低了。
^---必須要以抑揚(yáng)符之后的字符串開(kāi)始
$
--- 必須要以$之前的字符結(jié)尾
\b
---詞邊界
\B
---非邊界
{m}
---有且只能出現(xiàn)m次
{n,m}
---可以出現(xiàn)n到m次
{m,}
---至少m次,最大次數(shù)不限制
()
---改變優(yōu)先級(jí)或者將某個(gè)字符串視為一個(gè)整體,匹配到的數(shù)據(jù)取出來(lái)也可以使用它
接下來(lái)我們通過(guò)一些例子來(lái)實(shí)例看一下這些元字符的使用:
<?php $a = '/\d+/'; $b = "愛(ài)你10000年"; if(preg_match($a, $b, $c)){ echo '匹配到了,結(jié)果為:'; var_dump($c); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
通過(guò)元字符+的添加,匹配到了多次字符,\d+中d是匹配數(shù)字,+則表示最少匹配一次前面的字符。
正則表達(dá)式的模式修正符
通過(guò)原子和元字符的了解,我們已經(jīng)完成了正則表達(dá)式的入門,但是這仍然不能代表正則表達(dá)式的真正實(shí)力,如果我們只希望正則表達(dá)式匹配一部分應(yīng)該怎么辦?有些特殊情況依然需要處理,這時(shí)候我們就要用到正則表達(dá)式的模式修正符。
下面列舉一些常用的模式修正符:
i 模式中的字符將同時(shí)匹配大小寫字母.
m 字符串視為多行
s 將字符串視為單行,換行符作為普通字符.
x 將模式中的空白忽略.
A 強(qiáng)制僅從目標(biāo)字符串的開(kāi)頭開(kāi)始匹配.
D 模式中的美元元字符僅匹配目標(biāo)字符串的結(jié)尾.
U 匹配最近的字符串.
它的用法如下:
/正則表達(dá)式/模式修正符
接下來(lái)我們通過(guò)一些實(shí)例來(lái)看一下它的使用:
<?php $a = '/ABC/i'; $b = '8988abc12313'; $c = '11111ABC2222'; if(preg_match($a, $b, $d)){ echo '匹配到了,結(jié)果為:'; var_dump($d); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
i可以讓匹配的時(shí)候同時(shí)匹配大小寫,那么接下來(lái)把匹配的$b換成$c試一下,我們看一下輸出結(jié)果:
<?php $a = '/ABC/i'; $b = '8988abc12313'; $c = '11111ABC2222'; if(preg_match($a, $c, $d)){ echo '匹配到了,結(jié)果為:'; var_dump($d); }else{ echo '沒(méi)有匹配到'; } ?>
輸出結(jié)果:
“PHP的正則表達(dá)式基礎(chǔ)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。