搜尋
首頁後端開發php教程詳解正規表示式

詳解正規表示式

Jul 01, 2019 pm 04:25 PM
正規表示式

詳解正規表示式

正規表示式語言由兩種基本字元類型組成:原義(正常)文字字元和元字元。

相關推薦:
1. 正規表示式語法教學(含線上測試工具)
2. PHP正規表示式極速入門影片教學

元字元使用正規表示式具有處理能力。元字元既可以是放在[ ] 中的任意單一字元(如[a]表示符合單一小寫字元a),也可以是字元序列(如[a-d] 表示匹配a 、b、 c、 d 之間的任一個字符,而\w 表示任意英文字母和數字及下劃線),常見的元字元如下:

常見的元字元

##特別說明匹配除換行符(~#符合#所有字元是已匹配~不與在中括號符合大小寫英文字元及數字0 到9之間的任一及底線,相當於#~##\W\w\s\S相反,相當於\d\D 相反,相當於[\u4e00-\u9fa5]Unicode
字元 描述
. \n)以外的任意字元
[abcde] a b c d e 之中的任一字元 的關係
[a-h] a# h之間的任一個字元
[^fgh] fgh之中的任一個字元符合 [ ] 的第一個字元前加上^ 表示取反# 不符合中括號裡面出現的任意字元
\w [a-zA-Z0-9_]
相反,相當於[^a-zA-Z0-9_]##~~
符合任意的空白符,相當於[\f\n\r\t\v] #~
\s[^\s] ~
#符合任何0 到9 之間的單一數字,相當於[0-9] ~
\d[^0-9]~
符合任意單一漢字(中文)(這裡用的是 編碼表示的漢字) ~


  1. ##\b
  2. 匹配單字的開始或結束
  3. ~

^#符合字串的開始

放在中括號的第一個字元前則變成取反的意思符合字串的結束~單元 多出現的次數單元 和m 都是表示字元{0,}~?{0,1}#符合至少1 個元字符,相當於{1,}#{n}符合至少n 元字元
$
#正規表示式限定符 ##作用:限定這個符號前面一個
單元: 如果前面出現的是一個字元的話,則這一個字元就為一個單元 如果前面我們用小括號把一個很長的字串括起來的話,那麼整個小括號裡面都算是一個
上面的元字元都是針對單一字元匹配的,要同時符合多個字元的話,還需要藉助限定符,以下是一些常見的限定符(下表中n 整數。 )
描述#特別說明
##* 符合0 到多個元字符,相當於
符合0 到1 元字符,相當於
~
~
匹配n 元字元~ ##{n, }
###~###############{n,m}######## ##匹配n 到m 個元字元######~################\b######### 匹配單字邊界###### ~###############^#########字串必須以指定的字元開始######~########## ######$#########字串必須以指定的字元結束######~############

說明- 特例

  1. 可以將多個元字元或原義文字字元用括號括起來形成一個分組,例如 ^(13)[4-9]\d{8}$ 表示任意以13 開頭的行動手機號碼。
    1. abcabcabc  表示最後的字母c 出現1 次或多次;
    2. (abcabcabc) 表示整個字串abcabcabc 出現1 次或多次。
  2. 可以使用| 來表示 的關係,例如z|j|q 表示符合 z 、j、q 之中的任一個字母。其實等價於 [zjq]
    1. ab|cd|ef 表示的是:要嘛是 ab、要嘛是 cd要嘛是 ef#。
    2. a(b|cd|e)f 表示的是:以a開頭,要嘛是b、要嘛是cd要嘛是e,最後以f結尾。
    3. 總結:|) 的唯一邊界是小括號( )
  3. [0-9A-Z.?] 這個正規你如何理解?
    1. .? 出現在括號中括號時,.?將變成普通字元,它就是點和問號。你可以理解為 [ ] 的優先權要大於. 和 ? 的優先權。
    2. 此正規表示式將會完全符合字串 ?aaa.bbb ,記住這裡 . 和 ? 被完全當做了普通字元。

進階1 - 多重選取結構

多重選取結構其實就是元字元 | (或)的使用。
界定範圍:開頭、結尾、小括號

##意思#Windows98或Windows2000$都包含在|98 或2000
正規
#Windows98|Windows2000|WindowsXP符合
WindowsXP #^Windows98|Windows2000|WindowsXP$
#以Windows98開頭或包含Windows2000或以WindowsXP結尾#注意^
的範圍內,因為|的界線只有:開頭、結尾、小括號 Windows(98|2000|XP)#Windows然後
或###XP################

總結:多選結構可以包括很多字符,但不能超越 括號 的界限。

進階2 - 分組與後向引用

分組

  • 我們已經了解怎麼重複單一字元;
  • 但如果想要重複一個字串該怎麼辦?你 可以用小括號來指定子表達式(也叫做分組)
  • (\d{1,3}\.){3}\d{1,3} 簡單的IP 位址匹配表達式
  • 但是它也將符合256.300.888.999 這種不可能存在的IP 位址。你能寫出一個更準確的正規則?
  • ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4] \d|25[0-5]|[01]?\d\d?)

#反向引用

  • 使用小括號指定一個子表達式(分組)後,匹配這個子表達式的文字可以被捕獲,從而在表達式或其他程式中作進一步的處理。
  • 預設情況下,每個分組會自動擁有一個群組號,規則是:以分組的左括號為標誌,從左到右,第一個分組的組號為1 ,第二個為2 ,依次類別推

範例:

  • \b(\w )\b\s \1\b 可以用來符合重複的單字
  • 符合諸如:where where go, tom tom happy

直白解釋:##在正規表示式中,前面用小括號進行分割(分組),後面把小括號匹配到的內容
引用到後面來,分別用\1\2等來表示。 (第一個小括號極\1...)。如果存在小括號嵌套小括號的情況(\w (.?)) 記住:這個時候要以( 為標誌從左往右數小括號就可以了。

高級3 - 環視(零寬斷言)

    環視不匹配任何字符,只匹配文本中的
  • 特定位置。類似於 \b^$ 那樣。 環視不會佔用字元。
  • 環分為
  • 順序逆序兩種:
      順序
      • (?=exp) 位置的後面能匹配 exp 。例如:(?=\d) 目前位置右邊是數字。
      • (?!exp) 位置的後面不能符合 exp。例如:(?!\d) 目前位置右邊不是數字。
      ##逆序
      • (? 位置的前面可以符合 exp。例如:(? 目前位置左邊是數字<code>
    • (? 位置的前面不能符合 exp。例如:(?!\d ) 目前位置左邊不是數字。
#進階4 - 貪婪與懶惰

當正規表示式中包含能接受重複的
    量詞
  • (指定數量的程式碼,例如: *{3,12} 等)時,通常的行為是匹配盡可能多的字元 正規表示式:
  • a.*b
  • ,它將匹配最長的字元以a 開始,以b 結束的字串。如果用它來搜尋aabab 的話,它會符合整個字串aabab,這稱為-- -----貪婪匹配-
  • 我們更需要
  • 懶惰匹配
  • ,也就是匹配盡可能少的字符,前面給出的量詞都可以轉換成懶惰匹配模式,只要在它後面加上一個問號? 。這樣.*? 就表示符合任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複
  • #a.*?b
  • 匹配最短的,以a 開始, 以b 結束的字串。如果把它套用到 aabab 的話,它會符合 aabab
  • 總結:

貪婪與懶惰模式之間的差異就在於:
懶惰模式

在量詞* 的後面多了一個問號?

進階5 - 模式匹配的優先權

在使用正規表示式時,需要注意匹配的順序。通常相同優先權

從左到右

進行計算,不同優先權的運算 先高後低。各種運算子的符合順序優先權 從高到低 如下表所示。

##1\#轉義字元[] #模式單元與原子表{n,m}#重複對\Z邊界限制##5|
元字元 描述
2 ()(?:)(?=)
3* {n}{n,}
#4^$\b\B\A


#模式選擇

實例

1. 字元轉義

1問:要符合字串
    333333\$33\ 33333
  • 中的\$ 正規該怎麼寫?
  • 2問:如果在PHP 中
  • preg_match 函數分別用單引號雙引號
  • 的表達式來符合上面的
  • \$,怎麼寫? 答案:
表達式所需的規則是

\\\$

用單引號表示上面的字串
    '/\\\\\\$/'
  1. 。 (為方便查看我們拆分一下為'/\\  \\  \\  $/'以雙引號表示上面的字串
  2. "/\\\\ \\\$/"
  3. 。 (為方便檢查我們拆分一下為

    "/\\  \\  \\  \$/"問什麼呢? 再答:

PHP 中單引號不轉義任何字符,但是唯獨轉義

\ ,所以我們需要6個\

來產生表達式。 #########雙引號除了轉義###\### 以外,還需要多一個###\### 用來轉義###$### 所以它需要7 個###\###。 ############相關教學推薦:###PHP影片教學######

以上是詳解正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
繼續使用PHP:耐力的原因繼續使用PHP:耐力的原因Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python:探索他們的相似性和差異PHP和Python:探索他們的相似性和差異Apr 19, 2025 am 12:21 AM

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中