2009-04-22 34 views
5

OK, tôi biết rằng tôi nên sử dụng trình phân tích cú pháp DOM, nhưng điều này là để phân tích một số mã là bằng chứng về khái niệm cho một tính năng sau này, vì vậy tôi muốn nhanh chóng nhận được một số chức năng một bộ mã kiểm tra giới hạn.Thay thế các thuộc tính HTML bằng cách sử dụng regex trong PHP

Tôi đang cố gắng để dải chiều rộng và các thuộc tính chiều cao của khối HTML, nói cách khác, thay thế

width="number" height="number" 

với một chuỗi trống.

Chức năng Tôi đang cố gắng để viết ngoại hình như thế này vào lúc này:

function remove_img_dimensions($string,$iphone) { 
    $pattern = "width=\"[0-9]*\""; 
    $string = preg_replace($pattern, "", $string); 

    $pattern = "height=\"[0-9]*\""; 
    $string = preg_replace($pattern, "", $string); 

    return $string; 
} 

Nhưng điều đó không làm việc.

Làm cách nào để làm việc đó?

Trả lời

7

PHP là duy nhất trong số các ngôn ngữ chính, mặc dù regex được chỉ định dưới dạng chuỗi ký tự như Python, Java và C#, bạn cũng phải sử dụng các ký tự phân cách regex như trong Perl, JavaScript và Ruby.

Cũng cần lưu ý rằng bạn có thể sử dụng dấu nháy đơn thay vì dấu ngoặc kép để giảm nhu cầu thoát khỏi các ký tự như dấu ngoặc kép và dấu gạch chéo ngược. Đó là một thói quen tốt để có được, bởi vì các quy tắc thoát cho các chuỗi được trích dẫn kép có thể gây ngạc nhiên.

Cuối cùng, bạn có thể kết hợp hai thay thế của bạn vào một bằng phương tiện của một luân phiên đơn giản:

$pattern = '/(width|height)="[0-9]*"/i'; 
+0

Perfect - thanks a lot! –

4

Mẫu của bạn cần ký tự mẫu đầu/cuối. Như thế này:

$pattern = "/height=\"[0-9]*\"/"; 
$string = preg_replace($pattern, "", $string); 

"/" là ký tự thông thường, nhưng hầu hết các ký tự sẽ hoạt động ("| pattern |", "# pattern #", bất kỳ thứ gì).

0

Tôi nghĩ bạn đang thiếu dấu ngoặc đơn (có thể là //, || hoặc các cặp ký tự khác) cần bao quanh biểu thức chính quy trong chuỗi. Hãy thử thay đổi $ mẫu bài tập của bạn để hình thức này:

$pattern = "/width=\"[0-9]*\"/"; 

... nếu bạn muốn để có thể làm một so sánh case-insensitive, thêm một 'i' ở phần cuối của chuỗi, như sau:

$pattern = "/width=\"[0-9]*\"/i"; 

Hy vọng điều này sẽ hữu ích! David

Các vấn đề liên quan