熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHP正則表達式的使用技巧

2013-11-15 12:28:47  來源: PHP編程 

  PHP正則表達式的定義

  用於描述字符排列和匹配模式的一種語法規則它主要用於字符串的模式分割匹配查找及替換操作

  PHP中的正則函數

  PHP中有兩套正則函數兩者功能差不多分別為

  一套是由PCRE(Perl Compatible Regular Expression)庫提供的使用preg_為前綴命名的函數

  一套由POSIX(Portable Operating System Interface of Unix )擴展提供的使用以ereg_為前綴命名的函數(POSIX的正則函數庫自PHP 以後就不在推薦使用從PHP以後就將被移除)

  由於POSIX正則即將推出歷史舞台並且PCRE和perl的形式差不多更利於我們在perl和php之間切換所以這裡重點介紹PCRE正則的使用

  PCRE正則表達式

  PCRE全稱為Perl Compatible Regular Expression意思是Perl兼容正則表達式

  在PCRE中通常將模式表達式(即正則表達式)包含在兩個反斜線/之間/apple/

  正則中重要的幾個概念有元字符轉義模式單元(重復)反義引用和斷言這些概念都可以在文章[]中輕松的理解和掌握

  常用的元字符(Metacharacter)

  元字符     說明

  /A       匹配字符串串首的原子

  /Z       匹配字符串串尾的原子

  /b       匹配單詞的邊界     //bis/   匹配頭為is的字符串   /is/b/   匹配尾為is的字符串   //bis/b/ 定界

  /B       匹配除單詞邊界之外的任意字符   //Bis/   匹配單詞This中的is

  /d     匹配一個數字等價於[]

  /D     匹配除數字以外任何一個字符等價於[^]

  /w     匹配一個英文字母數字或下劃線等價於[azAZ_]

  /W     匹配除英文字母數字和下劃線以外任何一個字符等價於[^azAZ_]

  /s     匹配一個空白字符等價於[/f/t/v]

  /S     匹配除空白字符以外任何一個字符等價於[^/f/t/v]

  /f     匹配一個換頁符等價於 /xc 或 /cL

  匹配一個換行符等價於 /xa 或 /cJ

  匹配一個回車符等價於/xd 或 /cM

  /t     匹配一個制表符等價於 /x/或/cl

  /v     匹配一個垂直制表符等價於/xb或/ck

  /oNN   匹配一個八進制數字

  /xNN   匹配一個十六進制數字

  /cC    匹配一個控制字符

  模式修正符(Pattern Modifiers)

  模式修正符在忽略大小寫匹配多行中使用特別多掌握了這一個修正符往往能解決我們遇到的很多問題

  i     -可同時匹配大小寫字母

  M     -將字符串視為多行

  S     -將字符串視為單行換行符做普通字符看待使匹配任何字符

  X     -模式中的空白忽略不計  

  U     -匹配到最近的字符串

  e     -將替換的字符串作為表達使用

  格式/apple/i匹配appleApple忽略大小寫     /i

  PCRE的模式單元

  // 提取第一位的屬性

  /^/d{} ([/W])/d{}///d{}$匹配// 等字符串但上述正則表達式不匹配/的格式這是因為模式[/W]的結果/已經被存儲下個位置/引用時其匹配模式也是字符/

  當不需要存儲匹配結果時使用非存儲模式單元(?

  例如/(?:a|b|c)(D|E|F)//g/ 將匹配aEEg在一些正則表達式中使用非存儲模式單元是必要的否則需要改變其後引用的順序上例還可以寫成/(a|b|c)(C|E|F)/g/

  PCRE正則表達式函數

  以下為引用的內容

  preg_match()和preg_match_all()  
preg_quote()  
preg_split()  
preg_grep()  
preg_replace()
 

  
函數的具體使用我們可以通過PHP手冊來找到下面分享一些平時積累的正則表達式

  匹配action屬性

  以下為引用的內容

  $str = ;  
    $match = ;  
    preg_match_all(//s+action=/(?!http:)(*?)//s/ $str $match);  
    print_r($match); 
 

  
在正則中使用回調函數

  以下為引用的內容

  /**  
   * replace some string by callback function  
   *  
   */ 
  function callback_replace() {  
      $url = ;  
      $str = ;  
      $str = preg_replace ( /(?<=/saction=/)(?!http:)(*?)(?=//s)/e search(/$url //) $str );  
        
      echo $str;  
  }  
    
  function search($url $match){  
      return $url / $match;  
  } 
 

  
帶斷言的正則匹配

  以下為引用的內容

  $match = ;  
   $str = xxxxxxcomcn bold font 
paragraph text

  ;  
   preg_match_all ( /(?<=<(/w{})>)*(?=<///>)/ $str $match );  
   echo 匹配沒有屬性的HTML標簽中的內容;  
   print_r ( $match ); 
 

  
替換HTML源碼中的地址

  以下為引用的內容

  $form_html = preg_replace ( /(?<=/saction=/|/ssrc=/|/s)(?!http:|javascript)(*?)(?=//s)/e add_url(/$url ////) $form_html ); 
 

  
最後正則工具雖然強大但是從效率和編寫時間上來講有的時候可能沒有explode來的更直接對於一些緊急或者要求不高的任務簡單粗暴的方法也許更好


From:http://tw.wingwit.com/Article/program/PHP/201311/21027.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.