2009-04-22 55 views
5

好吧,我知道我應該使用DOM解析器,但是這是爲了留出一些代碼,這是後續功能的概念驗證,所以我想快速獲取一些功能一組有限的測試代碼。在PHP中使用正則表達式替換HTML屬性

我試圖剝離寬度和組塊的高度屬性HTML,換句話說,用一個空字符串替換

width="number" height="number" 

功能我想此刻寫看起來像這樣:

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; 
} 

但是,這並不工作。

我該如何做這項工作?

回答

7

雖然正則表達式是以像Python,Java和C#這樣的字符串文字的形式指定的,但您也必須使用像Perl,JavaScript和Ruby這樣的正則表達式分隔符。

請注意,您也可以使用單引號而不是雙引號來減少轉義字符(如雙引號和反斜槓)的需要。這是一個很好的習慣,因爲雙引號字符串的逃避規則可能會令人驚訝。

最後,您可以通過一個簡單的交替的方式你的兩個替代結合成一個:

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

完美 - 非常感謝! – 2009-04-23 18:46:19

4

你的模式需要開始/結束模式字符。就像這樣:

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

「/」 是平時的性格,但大多數字符會工作( 「|圖案|」, 「#模式#」,等等)。

0

我想你錯過了需要在字符串中包含正則表達式的括號(可以是//,||或各種其他字符對)。試着改變你的$模式分配給這種形式:

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

...如果你希望能夠做一個區分大小寫的比較中,添加一個「i」在字符串的結尾,即:

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

希望這有助於! David