PHP - 正則表示式



正則表示式只不過是一系列或模式本身的字元。它們為模式匹配功能奠定了基礎。

使用正則表示式,您可以在另一個字串中搜索特定字串,您可以用另一個字串替換一個字串,並且您可以將一個字串拆分為多個塊。

PHP 提供了特定於兩組正則表示式函式的函式,每組對應於特定型別的正則表示式。您可以根據您的喜好使用任何一個。

  • POSIX 正則表示式
  • PERL 風格的正則表示式

POSIX 正則表示式

POSIX 正則表示式的結構與典型的算術表示式非常相似:各種元素(運算子)組合在一起形成更復雜的表示式。

最簡單的正則表示式是匹配單個字元(例如 g)的正則表示式,例如在 g、haggle 或 bag 等字串中。

讓我們解釋一下 POSIX 正則表示式中使用的一些概念。之後,我們將向您介紹與正則表示式相關的函式。

方括號

方括號 ([]) 在正則表示式上下文中具有特殊含義。它們用於查詢一系列字元。

序號 表示式和描述
1

[0-9]

它匹配從 0 到 9 的任何十進位制數字。

2

[a-z]

它匹配從小寫 a 到小寫 z 的任何字元。

3

[A-Z]

它匹配從大寫 A 到大寫 Z 的任何字元。

4

[a-Z]

它匹配從小寫 a 到大寫 Z 的任何字元。

上面顯示的範圍是一般的;您還可以使用範圍 [0-3] 來匹配從 0 到 3 的任何十進位制數字,或使用範圍 [b-v] 來匹配從 b 到 v 的任何小寫字元。

量詞

方括號字元序列和單個字元的頻率或位置可以用特殊字元表示。每個特殊字元都有特定的含義。+, *, ?, {int. range} 和 $ 標記都位於字元序列之後。

序號 表示式和描述
1

p+

它匹配包含至少一個 p 的任何字串。

2

p*

它匹配包含零個或多個 p 的任何字串。

3

p?

它匹配包含零個或一個 p 的任何字串。

4

p{N}

它匹配包含N個 p 的序列的任何字串

5

p{2,3}

它匹配包含兩個或三個 p 的序列的任何字串。

6

p{2, }

它匹配包含至少兩個 p 的序列的任何字串。

7

p$

它匹配末尾為 p 的任何字串。

8

^p

它匹配開頭為 p 的任何字串。

示例

以下示例將闡明您關於匹配字元的概念。

序號 表示式和描述
1

[^a-zA-Z]

它匹配不包含從 a 到 z 和 A 到 Z 的任何字元的任何字串。

2

p.p

它匹配包含 p、後跟任何字元、然後再次後跟 p 的任何字串。

3

^.{2}$

它匹配包含正好兩個字元的任何字串。

4

<b>(.*)</b>

它匹配包含在<b>和</b>之間的任何字串。

5

p(hp)*

它匹配包含 p 後跟零個或多個 php 序列的任何字串。

預定義字元範圍

為了方便您的程式設計,提供了幾個預定義的字元範圍,也稱為字元類。字元類指定整個字元範圍,例如,字母表或整數集 -

序號 表示式和描述
1

[[:alpha:]]

它匹配包含字母字元 aA 到 zZ 的任何字串。

2

[[:digit:]]

它匹配包含數字 0 到 9 的任何字串。

3

[[:alnum:]]

它匹配包含字母數字字元 aA 到 zZ 和 0 到 9 的任何字串。

4

[[:space:]]

它匹配包含空格的任何字串。

PHP 的正則表示式 POSIX 函式

PHP 目前提供了七個函式,用於使用 POSIX 風格的正則表示式搜尋字串:

序號 函式及描述
1 ereg()

ereg() 函式在由 string 指定的字串中搜索由 pattern 指定的字串,如果找到該模式則返回 true,否則返回 false。

2 ereg_replace()

ereg_replace() 函式搜尋由 pattern 指定的字串,如果找到則用 replacement 替換 pattern。

3 eregi()

eregi() 函式在由 string 指定的字串中搜索由 pattern 指定的字串。搜尋不區分大小寫。

4 eregi_replace()

eregi_replace() 函式的工作方式與 ereg_replace() 完全相同,只是在 string 中搜索 pattern 時不區分大小寫。

5 split()

split() 函式將一個字串分成多個元素,每個元素的邊界基於 pattern 在 string 中的出現位置。

6 spliti()

spliti() 函式的工作方式與其兄弟函式 split() 完全相同,只是它不區分大小寫。

7 sql_regcase()

sql_regcase() 函式可以被認為是一個實用程式函式,它將輸入引數字串中的每個字元轉換為包含兩個字元的括號表示式。

PERL 風格的正則表示式

Perl 風格的正則表示式與其 POSIX 對應物類似。POSIX 語法幾乎可以與 Perl 風格的正則表示式函式互換使用。事實上,您可以使用前面 POSIX 部分中介紹的任何量詞。

讓我們解釋一下 PERL 正則表示式中使用的幾個概念。之後我們將向您介紹與正則表示式相關的函式。

元字元

元字元只是一個以反斜槓開頭的字母字元,用於賦予組合特殊的含義。

例如,您可以使用 '\d' 元字元搜尋大額金額:/([\d]+)000/,這裡 \d 將搜尋任何數字字元的字串。

以下是可以在 PERL 風格正則表示式中使用的元字元列表。

Character		Description
.              a single character
\s             a whitespace character (space, tab, newline)
\S             non-whitespace character
\d             a digit (0-9)
\D             a non-digit
\w             a word character (a-z, A-Z, 0-9, _)
\W             a non-word character
[aeiou]        matches a single character in the given set
[^aeiou]       matches a single character outside the given set
(foo|bar|baz)  matches any of the alternatives specified

修飾符

有幾個可用的修飾符可以使您使用正則表示式的操作更加輕鬆,例如區分大小寫、多行搜尋等。

Modifier	Description
i 	Makes the match case insensitive
m 	Specifies that if the string has newline or carriage
	return characters, the ^ and $ operators will now
	match against a newline boundary, instead of a
	string boundary
o 	Evaluates the expression only once
s 	Allows use of . to match a newline character
x 	Allows you to use white space in the expression for clarity
g 	Globally finds all matches
cg 	Allows a search to continue even after a global match fails

PHP 的正則表示式 PERL 相容函式

PHP 提供了以下函式,用於使用與 Perl 相容的正則表示式搜尋字串:

序號 函式及描述
1 preg_match()

preg_match() 函式在 string 中搜索 pattern,如果 pattern 存在則返回 true,否則返回 false。

2 preg_match_all()

preg_match_all() 函式匹配 string 中 pattern 的所有出現。

3 preg_replace()

preg_replace() 函式的工作方式與 ereg_replace() 完全相同,只是可以在 pattern 和 replacement 輸入引數中使用正則表示式。

4 preg_split()

preg_split() 函式的工作方式與 split() 完全相同,只是接受正則表示式作為 pattern 的輸入引數。

5 preg_grep()

preg_grep() 函式搜尋 input_array 的所有元素,並返回與正則表示式 pattern 匹配的所有元素。

6 preg_quote()

引用正則表示式字元

廣告