2010-02-07 36 views
7

Tôi nhận được thông báo sau cho một số php tôi phải sử dụng nhưng đã không viết:Làm thế nào để thay thế ereg?

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

Đây là dòng 466:

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

Tôi đã cố gắng chỉ đơn giản là thay thế với preg_match, nhưng nó couldn Tôi không phải là quá tốt với biểu thức chính quy nào được nêu ra và giải quyết điều này đòi hỏi rằng tôi tìm hiểu các nhu cầu regexp ereg VÀ regexp preg_match nhu cầu (trong đó, nếu tôi không nhầm lẫn, là khác nhau) ... Các bạn có thể giúp tôi với cái này không?

Cảm ơn

+0

có thể trùng lặp của [? Làm thế nào tôi có thể chuyển đổi biểu thức ereg để preg trong PHP] (https://stackoverflow.com/questions/6270004/how-can-i-convert-ereg-expressions-to- preg-in-php) – Meloman

Trả lời

6

POSIX mở rộng biểu thức thông thường (POSIX ERE, được sử dụng bởi ereg) và biểu thức thông thường Perl-combatible (PCRE, được sử dụng bởi preg_match) rất giống. Ngoại trừ some special POSIX expressions, PCRE là một siêu của POSIX ERE.

Điều đó có nghĩa bạn chỉ cần đặt biểu thức thông thường POSIX ERE của bạn vào delimiters (ở đây /) và thoát khỏi bất kỳ sự xuất hiện của nhân vật bên trong biểu hiện thường xuyên và bạn có một PCRE biểu thức chính quy hợp lệ:

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

Vì vậy, :

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

Không thực sự một superset (bên cạnh các lớp nhân vật), ví dụ: kết hợp '/ AB | ABC /' trên 'ABCD' với ERE sẽ cho kết quả dài nhất (' ABC') nhưng PCRE sẽ cho trận đấu đầu tiên ('AB'). – kennytm

2

Hãy thử:

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

Các regex trong preg_match cần phải được kèm theo giữa một cặp delimiters, mà không phải là trường hợp với các phản ereg() chức năng.

0

số preg_ gia đình hy vọng regex sẽ được phân tách. Thay vì:

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

thử:

'/^([^=]*)=["\']?([^"\']*)["\']?$/' 
Các vấn đề liên quan