2010-02-07 70 views
7

我收到以下消息一些PHP我有使用,但沒有寫:如何替換ereg?

Deprecated: Function ereg() is deprecated in /opt/lampp/htdocs/webEchange/SiteWeb_V5/inc/html2fpdf.php on line 466 

這是行466:

if(ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$v,$a3)) 

我試圖簡單地用更換的preg_match,但它couldn在正則表達式中我沒有認識到=修飾符。我對正則表達式還不太熟悉,解決這個問題需要我學習正則表達式ereg的需求和正則表達式preg_match的需求(如果我沒有弄錯,這個需求是不同的) ...你們能幫我解決這個問題嗎?

由於

+0

的[?我如何轉換額日格表達式在PHP中浸漬料(可能的複製https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to- preg-in-php) – Meloman 2017-09-14 12:44:13

回答

6

POSIX擴展正則表達式(POSIX ERE,通過ereg使用)和Perl的combatible正則表達式(PCRE,由preg_match使用)是非常類似。除some special POSIX expressions外,PCRE是POSIX ERE的超集。

這意味着你只需把你的POSIX ERE正則表達式爲delimiters(這裏/)和逃避的正則表達式內任何這類性質的發生,你有一個有效的PCRE正則表達式:

/^([^=]*)=["']?([^"']*)["']?$/ 

所以:

preg_match('/^([^=]*)=["\']?([^"\']*)["\']?$/', $v, $a3) 
+0

不是一個超集(除了字符類),例如在'ABCD'上匹配'/ AB | ABC /'與ERE會得到最長的匹配('ABC'),但是PCRE會給出第一個匹配('AB')。 – kennytm 2010-02-07 19:12:18

2

嘗試:

if(preg_match('~^([^=]*)=["\']?([^"\']*)["\']?$~',$v,$a3)) 

正則表達式中的preg_match需要一雙分隔符,這是不與棄用EREG()功能的情況下之間,以包圍。

0

preg_系列期望正則表達式被分隔。相反的:

'^([^=]*)=["\']?([^"\']*)["\']?$' 

嘗試:

'/^([^=]*)=["\']?([^"\']*)["\']?$/'