php中 Perl相容正規表示式 字尾選項

2021-08-26 19:48:05 字數 3375 閱讀 6827

php中 perl相容正規表示式 字尾選項

**:4.10 perl相容正規表示式

4.10.8

字尾選項

trailing options

perl風格的正規表示式允許把單個字元選項(標誌)放在正規表示式模式後面來修改匹配的解釋或行為。例如,要進行不區分大小寫的匹配,可以簡單地使用i標誌:

preg_match('/cat/i', 'stop, catherine!'); // returns true返回true

表4-12顯示了在perl相容正規表示式中支援的來自perl的修飾符:

表4-12:perl標誌

修飾符意 義

/regexp/i

不區分大小寫的匹配

/regexp/s

使句點(.)匹配任何字元,包括換行符(\n)

/regexp/x

從模式中刪除空白符和注釋

/regexp/m

使^匹配換行符 (\n)之後的內容,美元符號($)匹配換行符 (\n)之前的內容

/regexp/e

如果替換字串是php**,使用eval()執行該**來得到實際的替換字串。

php的perl相容正規表示式函式也支援在perl中不支援的其他修飾符,如表4-13所示:

表4-13:其他的php標誌

修飾符意 義

/regexp/u

顛倒子模式的貪婪性;*和+盡可能少地匹配而不是盡可能多。

/regexp/u

把模式字串當作utf-8編碼對待

/regexp/x

如果乙個反斜槓之後跟著沒有特殊意義的字元,將產生乙個錯誤

/regexp/a

把錨定位在字串的開頭就像模式中有^一樣

/regexp/d

使$字元僅匹配一行的末尾

/regexp/s

使表示式解析器更加小心地檢查模式的結構,使得第二次執行時(如在乙個迴圈中)加快速度

在乙個模式中可以使用多個選項,如下所示:

$message = <<< end

to: you@youcorp

from: me@mecorp

subject: pay up

pay me or else!

end;

preg_match('/^subject: (.*)/im', $message, $match);

// $match[1] 是 'pay up'

修飾符:

i :如果在修飾符中加上"i",則正則將會取消大小寫敏感性,即"a"和"a" 是一樣的。

m:預設的正則開始"^"和結束"$"只是對於正則字串如果在修飾符中加上"m",那麼開始和結束將會指字串的每一行:每一行的開頭就是"^",結尾就是"$"。

s:如果在修飾符中加入"s",那麼預設的"."代表除了換行符以外的任何字元將會變成任意字元,也就是包括換行符!

x:如果加上該修飾符,表示式中的空白字元將會被忽略,除非它已經被轉義。

e:本修飾符僅僅對於replacement有用,代表在replacement中作為php**。

a:如果使用這個修飾符,那麼表示式必須是匹配的字串中的開頭部分。比如說"/a/a"匹配"abcd"。

e:與"m"相反,如果使用這個修飾符,那麼"$"將匹配絕對字串的結尾,而不是換行符前面,預設就開啟了這個模式。

u:和問號的作用差不多,用於設定"貪婪模式"。

———————————————————————————————

模式修正符

模式修正符 — 解說正規表示式模式中使用的修正符

說明下面列出了當前在 pcre 中可能使用的修正符。括號中是這些修正符的內部 pcre 名。修正符中的空格和換行被忽略,其它字元會導致錯誤。

i (pcre_caseless)

如果設定此修正符,模式中的字元將同時匹配大小寫字母。

m(pcre_multiline)

默 認情況下,pcre 將目標字串作為單一的一「行」字元所組成的(甚至其中包含有換行符也是如此)。「行起始」元字元(^)僅僅匹配字串的起始,「行結束」元字元($)僅 僅匹配字串的結束,或者最後乙個字元是換行符時其前面(除非設定了 d 修正符)。這和 perl 是一樣的。

當設定了此修正符,「行起始」和「行結束」除了匹配整個字串開頭和結束外,還分別匹配其中的換行符的之後和之前。這和 perl 的 /m 修正符是等效的。如果目標字串中沒有「\n」字元或者模式中沒有 ^ 或 $,則設定此修正符沒有任何效果。

s(pcre_dotall)

如果設定了此修正符,模式中的圓點元字元(.)匹配所有的字元,包括換行符。沒有此設定的話,則不包括換行符。這和 perl 的 /s 修正符是等效的。排除字元類例如 [^a] 總是匹配換行符的,無論是否設定了此修正符。

x(pcre_extended)

如 果設定了此修正符,模式中的空白字元除了被轉義的或在字元類中的以外完全被忽略,在未轉義的字元類之外的 # 以及下乙個換行符之間的所有字元,包括兩頭,也都被忽略。這和 perl 的 /x 修正符是等效的,使得可以在複雜的模式中加入注釋。然而注意,這僅適用於資料字元。空白字元可能永遠不會出現於模式中的特殊字串行,例如引入條件子模式 的序列 (?( 中間。

a(pcre_anchored)

如果設定了此修正符,模式被強制為「anchored」,即強制僅從目標字串的開頭開始匹配。此效果也可以通過適當的模式本身來實現(在 perl 中實現的唯一方法)。

d(pcre_dollar_endonly)

如果設定了此修正符,模式中的美元元字元僅匹配目標字串的結尾。沒有此選項時,如果最後乙個字元是換行符的話,美元符號也會匹配此字元之前(但不會匹配任何其它換行符之前)。如果設定了 m 修正符則忽略此選項。perl 中沒有與其等價的修正符。

s當乙個模式將被使用若干次時,為加速匹配起見值得先對其進行分析。如果設定了此修正符則會進行額外的分析。目前,分析乙個模式僅對沒有單一固定起始字元的 non-anchored 模式有用。

u(pcre_ungreedy)

本修正符反轉了匹配數量的值使其不是預設的重複,而變成在後面跟上「?」才變得重複。這和 perl 不相容。也可以通過在模式之中設定 (?u) 修正符或者在數量符之後跟乙個問號(如 .*?)來啟用此選項。

x(pcre_extra)

此 修正符啟用了乙個 pcre 中與 perl 不相容的額外功能。模式中的任何反斜線後面跟上乙個沒有特殊意義的字母導致乙個錯誤,從而保留此組合以備將來擴充。預設情況下,和 perl 一樣,乙個反斜線後面跟乙個沒有特殊意義的字母被當成該字母本身。當前沒有其它特性受此修正符控制。

u(pcre_utf8)

此 修正符啟用了乙個 pcre 中與 perl 不相容的額外功能。模式字串被當成 utf-8。本修正符在 unix 下自 php 4.1.0 起可用,在 win32 下自 php 4.2.3 起可用。自 php 4.3.5 起開始檢查模式的 utf-8 合法性。

Perl 正規表示式

正規表示式文中列表 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個後向引用 或乙個八進位制轉義符。匹配輸入字串的開始位置。如果設定了 regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了 regexp 物件的multiline 屬性...

Perl正規表示式

元字元 元字元的含義是具有特殊含義的字元,即為元字元,元字元包括 點號能夠匹配所有的單字元,但是換行字元除外 n 簡易量詞 記載匹配正規表示式的時候有些需要重複的字元或者字串,我們在表示這種重複的形式的時候,即是量詞,我們知道的量詞有 表示至少重複一次,表示重複一次或者一次 以上,指的是重複一次或者...

perl 正規表示式

匹配 m 還可以簡寫為 略去 m 替換 s 轉化 tr 這三種形式一般都和 或 搭配使用 其中 表示相匹配,在整條語句中讀作 does,表示不匹配,在整條語句中讀作 doesn t 並在左側有待處理的標量變數。如果沒有該變數和 操作符,則預設為處理 變數中的內容。舉例如下 str i love pe...