溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP的正則表達(dá)式基礎(chǔ)有哪些

發(fā)布時(shí)間:2021-10-18 14:33:59 來(lái)源:億速云 閱讀:166 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“PHP的正則表達(dá)式基礎(chǔ)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

PHP的正則表達(dá)式基礎(chǔ)有哪些

正則表達(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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

由上述示例可以看出,我們定義了變量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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

上述示例中,希望匹配到字符串,但是$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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

在上述示例中,特殊標(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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

在上述實(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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

通過(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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

通過(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é)果:

PHP的正則表達(dá)式基礎(chǔ)有哪些

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ǔ)有哪些

“PHP的正則表達(dá)式基礎(chǔ)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

php
AI