preg和ereg的區別

2021-06-07 16:46:41 字數 2912 閱讀 3457

題記:在php5.3裡邊ereg家族要被preg代替了。在這裡列一下它們的區別。

名詞解釋:

preg,代表「perl的正規表示式(perl regular expressions)」。

ereg,代表「擴充套件的正規表示式(extended regular expressions)」。

區別:

1.preg_replace()裡面的正則可以寫成型如:"/..../"而ereg_replace()裡面的正則需寫成型如".....";

2.在逆向引用用preg_replace()可使用0-99個,而ereg_replace()最多為9個

3.preg_replace()能運算元組,而ereg_replace()不可以

4.其他區別(下面4條)

其他區別:

1.ereg裡面是不需要也不能使用分隔符和修飾符的。

例子:/

hello.+?hello

/is  說明:分隔符,表示式和修飾符

。2.'.'在正則裡面一般是除了換行符以外的全部字元,但是在ereg裡面的'.'是任意字元,即包括換行符!如果在preg裡面希望'.'能夠包括換行符,可以在修飾符中加上's'。

3.ereg預設使用貪婪模式,並且不能修改。

貪婪模式例子:要匹配以"a"開頭"b"結尾的字串,但是需要匹配的字串是"abbbbbbbbbbbbbbbbb",如果你使用了貪婪模式,那麼會匹配到最後乙個"b",反之只是匹配到第乙個"b"。

4.preg的速度要遠遠比ereg快。

例子說明:

(注:以preg_replace()和ereg_replace()函式的使用為例)

1.進行字串的查詢的替換

a:preg:

$str  = "daoyu shi ge hao hai zi 5555";

$pattern = "/\s/";   如果將變數定義為$pattern_1會出錯

$str  = preg_replace($pattern,'-',$str);

echo $str."

";輸出結果:daoyu-shi-ge-hao-hai-zi-5555

b:ereg:

$str  = "daoyu shi ge hao hai zi 5555";

$pattern= "[a-za-z]+";   如果寫成$pattern= "/[a-za-z]+/"; 將不做任何替換也就是說這裡不能用正則「/」(可能就是著兩個函式的第乙個區別 :))

$str = ereg_replace($pattern,'~',$str);

echo $str."

";輸出結果:~ ~ ~ ~ ~ ~ 5555

2.對字串的逆向引用

a:preg:

方法一 $pat  = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i";

$str  =preg_replace($pat,"\$1",$str);

echo $str."

";輸出結果:daoyu

注意:如果是下面這種形式你會發現匹配的是:zi- 所以可以這樣認為在有次數的的情況下,他($1)匹配的是最後一次

$pat  = "/((\w+)-)(\d+)/i";

$str  =preg_replace($pat,"\$1",$str);

echo $str."

";輸出結果:zi-

方法二 $str  = "daoyu-shi-ge-hao-hai-zi-5555";

$pat  = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; 

$str  =preg_replace($pat,"\\1",$str);

echo $str."

";輸出結果:daoyu

注意:當正則寫成$pat= "/((\w+)-)(\d+)/i";時和上面的情況一樣

b:ereg:

在用下書冊上的例子

$string = "this is a test";

echo ereg_replace("( )is", "\\1was", $string); 「\\1」匹配」(空格)is「 這部分的空格,換句話說就是」替換為數字表示的的第幾個括號內的子串「

echo ereg_replace("(( )is)", "\\2was", $string)."

";輸出結果:this was a test

3 當引數是陣列的情況(手冊的例子)

a:preg:

$string = "the quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";

$patterns[1] = "/brown/";

$patterns[2] = "/fox/";

$replacements[2] = "bear";

$replacements[1] = "black";

$replacements[0] = "slow";

print preg_replace($patterns, $replacements, $string)."

";輸出結果:the bear black slow jumped over the lazy dog.

或許你已經發現了,他是按「將以其鍵名在陣列中出現的順序來進行處理。這不一定和索引的數字順序相同」按我的理解就是在按「寫」的順序而這並不一定是索引的順序(書冊上還有還有ksort()後的例子,時間關係就不說了,有興趣的兄弟可以自己找著看下)

b:ereg:

不支援。

preg和ereg的區別

題記 在php5.3裡邊ereg家族要被preg代替了。在這裡列一下它們的區別。名詞解釋 preg,代表 perl的正規表示式 perl regular expressions ereg,代表 擴充套件的正規表示式 extended regular expressions 區別 1.preg rep...

php中ereg函式的截斷漏洞

ereg 函式用指定的模式搜尋乙個字串中指定的字串,如果匹配成功返回 true,否則,則返回false 搜尋字母的字元是大小寫敏感的。int ereg string pattern,string originalstring,array regs 例,email id admin tutorials...

PHP下ereg實現匹配ip的正則

我們先看個 片段 複製 如下 ip 1.1.1.255 chr 0 haha if ereg 0 9 0 9 0 9 0 9 ip else 這個ereg正則限制了 ip的資料為 這樣的形式,表面上看上面的 應該輸出 unknown 而實際卻輸出了 1.1.1.255haha 因為ereg函式存在n...