PHP正則表達式一些基礎

  正則表達式是一種可以用於模式匹配和替換的強有力的工具

正則表達式格式 : 正則表達式一般用兩個“/”定界符定界的,當然也可以不用。

元它符 : 就是指那些在正則表達式中具有特殊意義的專用字符

  限定符:

    “+”元字符規定其前導字符必須在目標對象中連續出現一次或多次,

    “*”元字符規定其前導字符必須在目標對象中出現零次或連續多次,

    “?”元字符規定其前導對象必須在目標對象中連續出現零次或一次。當放在限定符後表示懶惰匹配(匹配儘可以少的字符)。默認是貪婪匹配。當正則表達式中包含能接受重複的限定符時,通常的行爲是匹配儘可能多的字符。

      “|”管道符,表示“或”:如"ab|cd"同時匹配"ab"和"cd"而不匹配"abcd"   
  “( )”表示一或多個字符,從前往後,圓括號中的匹配字符串依次以$1,……$9,……返回:如"(bi(ng)z)hu(o)"中,$1代表"bi(ng)z",$2代表"ng",$3代表"o"
  “[ ]”中可有多個字符,但只表示其中一個:如"[xyx]"匹配"x","y","z"但不匹配"xyz",等同於"x|y|z";另,"[abcde]"這種連續字符可簡寫爲"[a-e]","[abcde12345]"可簡寫爲"[a-e1-5]"
  “[^ ]”表示除括號內字符以外的單個字符:如"[^xyz]"匹配"w","a"而不匹配"x","y";"[^abcde]"亦可簡寫爲"[^a-e]". 一般來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位於“[]”之外,或沒有“[]”時,則應當被視做定位符。
  “{n}”n爲一數字,表示前接字符重複次數:如"a{3}"表示"aaa"
  “{n,}”表示前接字符至少重複n次:如"a{3,}"匹配"aaa"和"aaaaa"而不匹配"aa"
  “{n,m}”表示前接字符至少重複n次,至多重複m次   
  “”爲轉義字符,後接上述特殊字符時表示該字符:如"?"表示"?","["表示"["

  轉義符:

    \s:用於匹配單個空格符,包括tab鍵和換行符;
    \S:用於匹配除單個空格符之外的所有字符;
    \d:用於匹配從0到9的數字;

    \D:用於匹配與/d不匹配的字符;
    \w:用於匹配字母,數字或下劃線字符;
    \W:用於匹配所有與/w不匹配的字符;
     . :用於匹配除換行符之外的所有字符。

    \t:用於匹配製表符。等價於/x09和/cl

   定位符: 除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較爲獨特的專用字符,即定位符。定位符用於規定匹配模式在目標對象中的出現位置。
較爲常用的定位符包括: “^”, “$”, “/b” 以及 “/B”。其中,

     “^”定位符規定匹配模式必須出現在目標字符串的開頭,“$”定位符規定匹配模式必須出現在目標對象的結尾,

    \b定位符規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一,

    “\B”定位符則規定匹配對象必須位於目標字符串的開頭和結尾兩個邊界之內,即匹配對象既不能作爲目標字符串的開頭,也不能作爲目標字符串的結尾。同樣,我們也可以把“^”和“$”以及“/b”和“/B”看作是互爲逆運算的兩組定位符。舉例來說:
/^hell/
因爲上述正則表達式中包含“^”定位符,所以可以與目標對象中以 “hell”, “hello”或 “hellhound”開頭的字符串相匹配。
/ar$/
因爲上述正則表達式中包含“$”定位符,所以可以與目標對象中以 “car”, “bar”或 “ar” 結尾的字符串相匹配。
//bbom/
因爲上述正則表達式模式以“/b”定位符開頭,所以可以與目標對象中以 “bomb”, 或 “bom”開頭的字符串相匹配。
/man/b/
因爲上述正則表達式模式以“/b”定位符結尾,所以可以與目標對象中以 “human”, “woman”或 “man”結尾的字符串相匹配。

    修飾符: 在正則表達式裏面的修飾符可以改變正則的很多特性,使得正則表達式更加適合你的需要(注意:修飾符對於大小寫是敏感的,這意味着 "e "並不等於 "E ")。

     i   :如果在修飾符中加上 "i ",則正則將會取消大小寫敏感性,即 "a "和 "A "   是一樣的。  
     m:默認的正則開始 "^ "和結束 "$ "只是對於正則字符串如果在修飾符中加上 "m ",那麼開始和結束將會指字符串的每一行:每一行的開頭就是 "^ ",結尾就是 "$ "。  
    s:如果在修飾符中加入 "s ",那麼默認的 ". "代表除了換行符以外的任何字符將會變成任意字符,也就是包括換行符!  
    x:如果加上該修飾符,表達式中的空白字符將會被忽略,除非它已經被轉義。  
    e:本修飾符僅僅對於replacement有用,代表在replacement中作爲PHP代碼。  
    A:如果使用這個修飾符,那麼表達式必須是匹配的字符串中的開頭部分。比如說 "/a/A "匹配 "abcd "。  
    E:與 "m "相反,如果使用這個修飾符,那麼 "$ "將匹配絕對字符串的結尾,而不是換行符前面,默認就打開了這個模式。  
    U:和問號的作用差不多,用於設置 "貪婪模式 "。

   字符簇:

    [[:alpha:]] 任何字母
    [[:digit:]] 任何數字
    [[:alnum:]] 任何字母和數字
    [[:space:]] 任何白字符
    [[:upper:]] 任何大寫字母
    [[:lower:]] 任何小寫字母
    [[:punct:]] 任何標點符號
    [[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]

   各種操作符的優先級:

 

操作符 描述
/ 轉義符
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, /anymetacharacter 位置和順序
| “或”操作

 

例子:

//替換m變量爲p
$string = ' m._form item.abcdfe:m.fun();abc+m.str';
$pattern = '/([^a-zA-Z])m\./'; // '/([^a-zA-Z])m./';也行
$replacement = '$1p.'; //就不知道爲什麼改成 '\${1}p.';不行
print preg_replace($pattern, $replacement, $string);
echo '<br />';
//$後接數字如$1的使用,貪婪匹配模式
$string = "April 15, 2003 May 1, 2012-------";
$pattern = "/(\w+ )(\d+), (\d+)/";
$replacement = "\${1},\$2";
print preg_replace($pattern, $replacement, $string);
echo '<br />';

匹配郵箱:

$pattern = '/^[0-9a-zA-Z]+@[0-9a-zA-Z]+[.][a-z]{2,4}$/';
$re = preg_match($pattern, $string);
var_dump($re);


PHP內置的一些替換功能的函數:

string strip_tags ( string$str [, string$allowable_tags ] )
$text '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo 
strip_tags($text);
echo 
"\n";

// Allow <p> and <a>
echo strip_tags($text'<p><a>');

上例將輸出:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>

發佈了28 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章