PHP核心技術與最佳實務之Regex匹配規則____PHP

來源:互聯網
上載者:User

PHP核心技術與最佳實務之Regex匹配規則

本文介紹幾種常用的匹配規則。

1.     字元組

尋找數字、字母、空白很簡單,因為已經有了對應這些集合的元字元,但是如果匹配沒有預定義元字元的字元集合,方法很簡單, 就是在方括弧內列出它們。

例如:[aeiou]匹配任何一個英文母音字母,[.*?]匹配標點中的一個。注意此時方括弧內的元字元失去了特殊意義。

也可以指定字元範圍,例如[0-9]的含義和\d完全一致:代表一位元字;同理[a-zA-Z0-9]等同於\w;

字元組很簡單,但是一定要弄清楚字元組中什麼時候需要轉義。

2.      轉義

如果想要尋找或匹配元字元本身,比如尋找*、。等就出現問題:沒辦法指定,因為它們會被解釋成別的意思。這時就需要\來取消這些字元的特殊意義。這叫轉義。

在PHP中使用反斜線(\)表示轉義,\Q和\E也可以在模式中忽略Regex的元字元。比如:
\d +\Q.$.\E$

以上運算式先匹配一個或多個數字,緊接著一個.點號,然後一個$,再然後一個.點號,最終是字串末尾。也就是說\Q和\E中的元字元會被作為一般字元來匹配。

3.      反義

有些時候,尋找的字元不屬於某個字元類,或者運算式和已知定義相反,(比如除了數字以外其他字元),這時需要用到反義。

常用反義:

常用反義

描述

\W

匹配任意不是字母、數字、底線、漢字的字元

\S

匹配任意不是空白符的字元

\D

匹配任意非數位字元

\B

匹配不是單詞開頭或結束的位置

[^x]

匹配除了x以外的任一字元

反義有一個比較明顯的特徵,就是和一些已知元字元相反,並且為大寫形式。比如”\D”就表示非數字。

1)    不包含空白符的字串

\S+

2)    用角括弧擴起來、以a開頭的字串:

<a[^>] +>

提示:

“^”這裡是非的意思,不是開頭的。如何區分。

表示開頭的 ^只能用在Regex的最前端,而表示取反的^只能用在字元組中,即只在中括弧內出現。

注意:

不要隨意使用反義,因為反義無形中擴大範圍,而使自己沒有考慮到。

4.     分支

分支就是存在多種可能的匹配情況。

(c|h|f|to|)cat

其中括弧裡的運算式將視為一個整體,分支條件指有幾種規則,無論滿足哪一種規則都能匹配,具體方法是使用“|”方法把不同的規則分隔開。

5.     分組

重複單個字元只需直接在字元後面加上限定符,但如果想重複多個字元。

常用的分組文法:

類別

文法

描述

捕獲

(exp)

匹配exp,並捕獲文本到自動命名的組裡

(?<name>exp)

匹配exp,並捕獲文本到name的組裡

(?:exp)

匹配exp,不捕獲匹配的文本

零寬斷言

(?=exp)

匹配exp前面的位置

(?<=exp)

匹配exp後面的位置

(?!exp)

匹配後面不是exp的位置

(?<!exp)

匹配前面不是exp的位置

注釋

(?#comment)

注釋,不對正則有任何影響

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.