1. 程式人生 > >php正則表示式及涉及函式

php正則表示式及涉及函式

元字元描述示例
.匹配任意單個字元。正則表示式 a.c 可以匹配 aac,a2c,a#c 等
$匹配字串的結尾。正則表示式 abc$ 可以匹配最後以 abc 結尾的字串
^匹配字串的開始。正則表示式 ^what 可以匹配以 what 開始的字串
*匹配 * 前面的子串零次或多次正則表示式 abc*d 可以匹配 abcd、aad、bd、bcd、d等字串
+匹配 * 前面的子串一次或多次正則表示式 abc*d 可以匹配 abcd、aad、bd、bcd等字串
{i}匹配指定個數的字元正則表示式 [0-9]{11} 可以匹配由11個數字字元組成的字串
{i1,2}匹配個數在i1到i2範圍的字元正則表示式 [0-9]{8,11}
 可以匹配由8-11個數字字元組成的字串
\轉義符,將字串中的元字元當作普通的字元匹配正則表示式 \*a 匹配 *a
[ ]匹配[]中的任何一個字元正則表示式 [ab]c 可以匹配 ac、bc
[c1-c2]在[]中使用連字元‘-’指定字元的區間正則表示式 [0-9] 可以匹配任何數字字元
[^c1-c2]匹配除了[]中的任意字元正則表示式 [^0-9] 匹配除了數字字元之外的任意字元
( )用於定義匹配的子模式
|從多個選項中選擇一個進行匹配正則表示式 (a|b|c) 可以匹配 a、b、c

----------------------------------------------------------------------------------------------------------------------------------|選擇分支(或),注意使用”[]“與”|”的區別,在於”[]“只能匹配單個字元,而”|“可以匹配任意長度的字串,

例如要匹配com、edu或net就可以寫作com|edu|net。.)匹配任意一個字元,但是當.在字元類([]中的內容)的開始或結尾時就只能是.。^在[]外表示從這開始,在括號內表示不包括,例如[^1-5],該字元不是1~5之間的數字。$表示到這結束,例如"^[A-Za-z]+$"表示由26個英文字母組成的字串 。

判斷字串”I am a good boy“中是否包含單詞go,可以使用\bgo\b,確保匹配的是一個完整的單詞而不是單詞的一部分。在字串”I am a good boy“中沒有單詞go,使用\bgo\b就會提示匹配不到,而不使用\b就會匹配到”I am a good boy“。還有與之對應的\B意思相反。


在php正則表示式中,通過\n,來表示第n次匹配到的結果。如\5代表第五次匹配到的結果。

----------------------------------------------------------------------------------------------------------------------------------

不使用正則匹配的strstr函式

strstr() 函式搜尋字串在另一字串中的第一次出現。

註釋:該函式是二進位制安全的。

註釋:該函式對大小寫敏感。如需進行不區分大小寫的搜尋,請使用 stristr() 函式。

註釋:返回值是從搜尋到的字串到最後


不使用正則匹配的strpos函式

strpos() 函式查詢字串在另一字串中第一次出現的位置。

註釋:strpos() 函式對大小寫敏感。(stripos不區分大小寫,strrpos~最後一次~區分大小寫,strripos不區分大小寫)

註釋:該函式是二進位制安全的。


使用正則匹配的preg_math()和preg_match_all函式

preg_match() 第一次匹配成功後就會停止匹配,所以返回值為0或1。如果要實現全部結果的匹配,即搜尋到結尾處,則需使用 preg_match_all() 函式。

preg_match("/php/", "php php php php php.", $matches); 

print_r($matches); 

preg_match_all("/php/", "php php php php php.", $matches); 

 print_r($matches);  

對應的輸出

Array  
(  
    [0] => php  
)  
Array  
(  
    [0] => Array  
        (  
            [0] => php  
            [1] => php  
            [2] => php  
            [3] => php  
            [4] => php  
        )  
  
)  

php中貪婪匹配與惰性匹配

  • 貪婪匹配:匹配儘可能多的字元。 
    比如,正則表示式中m.*n,它將匹配最長以m開始,n結尾的字串。如果用它來搜尋manmpndegenc的話,它將匹配到的字串是manmpndegen而非man。可以這樣想,當匹配到m的時候,它將從後面往前匹配字元n。
  • 懶惰匹配:匹配儘可能少的字元。 
    在後面新增一個”?”可將貪婪匹配轉變成懶惰匹配。如m.*?n匹配到的字串是man。

----------------------------------------------------------------------------------------------------------------------------------

最後我要吐槽一下php正則表示式對於我這種笨笨的初學者來說真的好難,讀一遍頭都大,而且一臉懵逼