2011-11-16 9 views
21

thể trùng lặp:
Converting ereg expressions to pregGỡ rối "Delimiter không phải là chữ hay dấu xổ ngược" lỗi khi thay đổi ereg() để preg_match()

<?php 
$searchtag = "google"; 
$link = "http://images.google.com/images?hl=de&q=$searchtag&btnG=Bilder-Suche&gbv=1"; 
$code = file_get_contents($link,'r'); 
ereg("imgurl=http://www.[A-Za-z0-9-]*.[A-Za-z]*[^.]*.[A-Za-z]*", $code, $img); 
ereg("http://(.*)", $img[0], $img_pic); 
echo '<img src="'.$img_pic[0].'" width="70" height="70">'; ?> 

Và tôi nhận được lỗi này

Không được chấp nhận: Chức năng ereg() không được chấp nhận trong C: \ P tệp rogram \ EasyPHP-5.3.8.1 \ www \ m \ img.php trên dòng 5

Không được chấp nhận: Chức năng ereg() không được dùng trong C: \ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img. php on line 6

preg_match() chức năng cho lỗi này

Cảnh báo: preg_match() [function.preg-match]: Delimiter không phải là chữ hoặc dấu chéo ngược trong C: \ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php trên dòng 6

Cảnh báo: preg_match() [function.preg-match]: Del imiter không phải là chữ hoặc dấu chéo ngược trong C: \ Program Files \ EasyPHP-5.3.8.1 \ www \ m \ img.php trên dòng 7

+0

Câu hỏi liên quan có thể trả lời câu hỏi của anh nhưng làm thế nào mà làm cho những câu hỏi lặp? –

Trả lời

45
  1. ereg bị phản đối. Không sử dụng nó.
  2. Các chức năng preg là tất cả "Cụm từ thông dụng Perl" có nghĩa là bạn cần có một số loại điểm đánh dấu đầu và cuối trên regex của mình. Thông thường, điều này sẽ là / hoặc #, nhưng bất kỳ số nào không phải là chữ số sẽ làm tốt.

Ví dụ, chúng sẽ làm việc:

preg_match("/foo/u",$needle,$haystack); 
preg_match("#foo#i",$needle,$haystack); 
preg_match("@[email protected]",$needle,$haystack); 
preg_match("\$foo\$w",$needle,$haystack); // bad idea because `$` means something 
              // in regex but it is valid anyway 
              // also, they need to be escaped since 
              // I'm using " instead of ' 

Nhưng điều này sẽ không:

preg_match("foo",$needle,$haystack); // no delimiter! 
+0

cảm ơn bạn đã giải thích! – gordon33

+1

Khi tôi thử preg_match ("/ foo/g", $ kim, $ haystack); Nó không hoạt động. Tôi nhận được cảnh báo PHP, công cụ sửa đổi không xác định 'g' – James

+0

Theo [câu trả lời] (http://stackoverflow.com/a/3578703/1676444) về một câu hỏi khác, công cụ sửa đổi mẫu '/ g' sẽ không hoạt động trong PHP. Bạn sẽ cần sử dụng 'preg_match_all' thay thế trong ví dụ của bạn. [Danh sách các Modifier mẫu cho PHP] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) – Turnerj

3

Với preg_match() regex của bạn phải bắt đầu và kết thúc bằng một dấu phân cách như / với vài ngoại lệ (ví dụ như thêm "i" ở cuối cho trường hợp không phân biệt chữ hoa chữ thường).

ví dụ:

preg_match('/[regex]/i', $string) 
+0

"Dấu phân cách có thể là bất kỳ ký tự không phải chữ và số, không dấu chéo ngược, không khoảng trống nào". [Thủ công] (http://www.php.net/manual/en/regexp.reference.delimiters.php). Nhưng có, bạn nói đúng, các dấu phân cách bị thiếu. – lonesomeday

+0

Ah vâng. Cảm ơn tôi sẽ cập nhật bài đăng của tôi! –