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