PHP與正則表達系列之一: PHP中的正則表達式_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:PHP讀取RSS feed源代碼(帶注釋,可讀取多個源)
      因為網站需要讀取不同來源的rss feed,寫了一個php程序來循環讀取rss feed,為了方便閱讀及了解程序實現過程,加上了注釋,和大家共同學習。而助易網的rss讀取就是在這個程序的基礎上稍做改造而

      今天起,會開始弄一個PHP教程系列文章. 主要是針對正則表達式的。

      大概的內容排序是這樣安排的:

      1. PHP 中的正則表達式

      2. 八個實用的PHP正則表達式

      3. 如何書寫更易閱讀的PHP正則表達式

      4. 半小時精通正則表達式

      5. 正則在文章采集系統中的應用及常見問題答疑

      6. ...更多策劃中

      文章內容來源方面,有本站舊文重新整理而來,也有翻譯英文文獻而來(感謝在加拿大的!oEL同學),還有些是個人心得。

      個人能力有限,肯定有一些錯誤,發現的朋友請給予提醒以及時更正. 不至誤導新手. 如果文章能給大家一些參考,就很滿足了。

      PHP與正則表達系列之: PHP 中的正則表達式

      正則表達式簡介及正則表達式在PHP中的作用

      正則表達式是一種表示規則的途經,在 PHP 中利用這些規則可以讓你靈活變通地匹配、檢驗、替換以及字符串。本文涉及到 PCRE 的基礎,以及如何使用 preg_match(),preg_replace(),and preg_split() 函數。

      接下來就讓我們從實例循序漸進地開始學習如何使用這些函數。

      規則匹配 preg_match

      利用 preg_match(),我們可以完成字符串的規則匹配。如果找到一個匹配,preg_match() 函數返回 1,否則返回 0。還有一個可選的第三參數可以讓你把匹配的部分存在一個數組中。在驗證數據時這個功能可以變得非常有用。


      $string = "football";
      if (preg_match('/foo/', $string)) {
      // 匹配正確
      }

      上面的例子將成功匹配,因為單詞 football 里面包含 foo。現在我們來試一個更復雜的,例如驗證一個 Email 地址。


      $string = "first.last@domain.uno.dos";
      if (preg_match(
      '/^[^0-9][a-zA-Z0-9_] ([.][a-zA-Z0-9_] )*[@][a-zA-Z0-9_] ([.][a-zA-Z0-9_] )*[.][a-zA-Z]{2,4}$/',
      $string)) {
      // 驗證Email地址
      }

      這個例子將驗證出此 Email 地址為正確格式。現在讓我們來看看這段正則表達式所代表的各種規則。

      PCRE 顧名思義,與在 Perl 中的正則表達式有相同的語法,所以每段正則表達式必須要有一對定界符。我們一般使用 / 為定界符。

      開頭的 ^ 和結尾的 $ 讓PHP從字符串開頭檢查到結尾。假使沒有 $,程序仍會匹配到 Email 的末尾。

      [ 和 ] 被用來限制許可輸入類型。例如 a-z 允許所有的小寫字母,A-Z 允許所有的大寫字母,0-9 所有數字,等等,以及更多其他類型。

      { 和 } 被用來限制期望的字符數。例如 {2,4} 表示字符串的每一節可以有 2-4 字符長度,像是 .com.cn 或 .info。在這里, "." 并不算一個字符,因為 {2,4} 之前定義的許可輸入類型只有大小寫字母,故此段只匹配大小寫字母

      ( 和 ) 被用來合并小節,并定義字符串中必須存在的字符。(a|b|c) 能夠匹配 a 或 b 或 c。

      (.) 將匹配所有字符,而 [.] 只匹配 "." 本身。

      要使用一些符號本身,必須在前增加一個 。這些字符有: ( ) [ ] . * ? ^ | $

      規則替換 preg_replace

      preg_replace 允許你替換字符串中匹配到你定義的正則表達式。一個簡單的注釋移除功能:

      preg_replace('[(/*) . (*/)]', '', $val);

      這段代碼可以移除在 PHP 和 CSS 中使用 /* 注釋 */ 格式的多多行注釋。其中的三個參數分別為正則表達式,要替換成的字符串和要替換的目標字符串(這里要做移除功能,所以是個空白字符串 -> '')。如果你想匹配次級規則,可以使用 $0 代表全部匹配,$1、$2 等,以此類推代表分別的次級規則。

      規則分割preg_split

      preg_split 可以將整段字符串按匹配到的正則表達式分割成 1、2或更多字符的多段。比如獲取標簽,無論是用空格還是逗號分隔的:


      $tags = preg_split('/[,]/', 'my,tags,unevenly,spaced');
      print_r($tags);

      正則表達式是一個很實用的技巧,讓你可以專注于所期望得到的內容。

      但有時候一段正則表達式并不能讓你如愿以償得到預期的結果是件很煩人的事,所以我將在本系列的第二篇文章附上一些簡單的語法指南希望能夠幫到大家。

      附:PCRE 語法指南

      / 定界符
      ^ 字符串頭
      $ 字符串尾
      [a-z] 所有小寫字母
      [A-Z] 所有大寫字母
      [0-9] 所有數字
      ? 零或一個緊接前的字符
      * 零或多個緊接前的字符
      一或多個緊接前的字符
      {4} 4個緊接前的字符
      {4,8} 4-8個緊接前的字符
      . 任意字符
      (red|green|blue) Red 或 green 或 blue(紅 或 綠 或 藍)
      s 空格

      特殊字符(需要在前加 )

      ( ) [ ] . * ? ^ | $

      分享:PHP開發大型項目的方法:OOP思想
      面向對象編程的概念: 不同的作者之間說法可能不一樣,但是一個OOP語言必須有以下幾方面: 抽象數據類型和信息封裝、繼承、多態 在PHP中是通過類來完成封裝的: 代碼:

      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程