程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 如何在PHP中使用正則表達式(1)

如何在PHP中使用正則表達式(1)

編輯:關於PHP編程

何為正則表達式?

幾年前,我對 Web 表單的輸入框做了一些有趣的檢驗。用戶將在此表單中輸入電話號碼。隨後,此電話號碼會按用戶鍵入的形式打印在用戶的廣告中。按照要求,美國的電話號碼可以幾種方式輸入:可以是 (555) 555-5555,也可以是 555-555-5555,但不能接受 555-5555 這樣的形式。

您或許會感到奇怪,為什麼我們不拋開所有的非數字字符,只保證剩余的字符總數為 10 呢?這種方法確實可行,但無法阻止用戶輸入 !555?333-3333 這樣的內容。

以一名 Web 開發者的眼光來看,這種情況帶來了一項有趣的挑戰。我可以編寫例程來檢查各種不同格式,但我希望能夠找到一種解決方案,假如用戶隨後認可 555.555.5555 這樣的格式,這種解決方案能具備一定的靈活性。

這正是正則表達式(簡稱為 regex)的適用場景。之前我已經將它們剪切並粘貼到了應用程序中,但從未發現任何難以理解的語法問題。Regex 看上去非常像數學表達式。當您看到一個形如 2x2=4 的表達式時,您通常會想到 “2 乘以 2 等於 4”。正則表達式與之非常類似。閱讀過本文後,當您看到一個這樣的正則表達式 ^b$ 時,您就會告訴自己:“一行的開頭是 b,隨後就是行尾”。不僅如此,您還會意識到在 PHP 中使用正則表達式有多麼簡單。

使用 regex 的時機

在有規則可循時,您應使用 regex 來完成搜索和替換操作,但不必具有需要找到或替換的確切字符。舉例來說,在上文中提到的電話號碼的例子中,用戶定義了表明所輸入電話號碼的格式的規則,但並未定義電話號碼中所包含的數字。這同樣適用於有大批用戶輸入的場景。美國州名縮寫可限制為兩個從 A 到 Z 的大寫字母。這裡也可使用正則表達式,您可簡單地將表單中的文本或用戶輸入限制為字母表中的字母,而無需考慮大小寫和長度問題。

不宜使用 regex 的時機

正則表達式功能強大,但也有一些缺陷。其中之一就是要求具備讀寫表達式的相關技能。如果您決定在應用程序中包含正則表達式,就應該對其進行完整的注釋。這樣,此後如果有其他人需要更改表達式,即可在不中斷功能的情況下完成更改。另外,如果您對於使用正則表達式不夠熟悉,可能會發現它們難於調試。

為避免出現這些難題,在更簡單的內置功能足以很好地解決問題時不要使用正則表達式。

POSIX 與 PCRE

PHP 支持兩種正則表達式的實現:Portable Operating System Implementation(POSIX)和 Perl-Compatible Regular Expression(PCRE)。這兩種實現提供了不同的特性,但它們在 PHP 中使用起來一樣簡單。您所使用的 regex 風格取決於您過去在 regex 使用方面的經驗和使用習慣。有一些證據表明,PCRE 表達式的速度比 POSIX 表達式要略微快一點,但在絕大多數應用程序中,這一差別體現得不是那麼明顯。

在本文的示例中,各 regex 方法的語法都包含在注釋中。在函數語法中,regex 為 regex 參數,所搜索的字符串為 string。括號中的參數是可選的,由於本教程主要介紹基礎內容,故不會給出全部可選參數的介紹。

1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved