老生常談php 正則中的i,m,s,x,e分別表示什麼

NO IMAGE

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

m       
當設定了此修正符,“行起始”和“行結束”除了匹配整個字串開頭和結束外,還分別匹配其中的換行符的之後和之前。

s        
如果設定了此修正符,模式中的圓點元字元(.)匹配所有的字元,包括換行符。沒有此設定的話,則不包括換行符。

x         
如果設定了此修正符,模式中的空白字元除了被轉義的或在字元類中的以外完全被忽略,在未轉義的字元類之外的 #以及下一個換行符之間的所有字元,包括兩頭,也都被忽略。

e         
如果設定了此修正符,preg_replace() 在替換字串中對逆向引用作正常的替換,

?在 . 和 * 之後 表示非貪婪匹配: *、 和?限定符都是貪婪的,因為它們會儘可能多的匹配文字,只有在它們的後面加上一個?就可以實現非貪婪或最小匹配。

例如:


<?php
$string = "上飛機離開我<img border='0' alt='' src='/uploadfile/2009/0921/20090921091612567.jpg' border='0' />sdfsdf";

$su = preg_match("/ \<[ ]*img.*src[ ]*\=[ ]*[\"|\'](. ?)[\"|\'] /", $string,$match); // 匹配src=的內容
print_r($match[1]); // 輸出 /uploadfile/2009/0921/20090921091612567.jpg

$su = preg_match("/ \<[ ]*img.*src[ ]*\=[ ]*[\"|\'](. )[\"|\'] /", $string,$match);
print_r($match[1]); // 輸出 /uploadfile/2009/0921/20090921091612567.jpg' border='
?>

例子:(?i):

(?i)在PHP中的意思是內部修正符,i指不區分大小寫

其它的修正符還有x,m,s,U等。和我們使用的模式修正符是一樣的。

區別在於它是在模式內部使用的。僅作用於(?i)所在的子模式內

ccc(a(?i))bcd 匹配 cccabcd和cccAbcd

而a(?i)bc則和abc加上\i修正符是一樣的因為(?i)作用於整個模式

後向引用

對一個正規表示式模式或部分模式兩邊新增圓括號將導致相關匹配儲存到一個臨時緩衝區中,所捕獲的每個子匹配都按照在正規表示式模式中從左至右所遇到的內容儲存。儲存子匹配的緩衝區編號從 1 開始,連續編號直至最大 99 個子表示式。每個緩衝區都可以使用 ‘\n’ 訪問,其中 n 為一個標識特定緩衝區的一位或兩位十進位制數。

可以使用非捕獲元字元 ‘?:’, ‘?=’, or ‘?!’ 來忽略對相關匹配的儲存。

以上這篇老生常談php 正則中的i,m,s,x,e分別表示什麼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援指令碼之家。

您可能感興趣的文章:

PHP中preg_match正則匹配中的/u、/i、/s含義PHP 正規表示式後面接的/isU, /is, /s含義淺談PHP正規表示式中修飾符/i, /is, /s, /isUPHP正規表示式 /i, /is, /s, /isU等介紹