2010-12-10 63 views
2

只是我更換對象標記給定的字符串PHP:不能代替使用的preg_replace()

$matches = preg_replace("/<object(.+?)</object>/","replacing string",$str); 

中卻是露出了誤差

Warning: preg_replace() [function.preg-replace]: Unknown modifier 'o' 

出了什麼問題?

回答

1

</object>中的斜槓必須被引用:<\/object>,否則它會被解釋爲您的正則表達式的結尾,因爲您正在用斜線對其進行分隔。整行應爲:

$matches = preg_replace("/<object(.+?)<\\/object>/","replacing string",$str); 
+0

@ACBalaji當你可以的時候,不要忘記接受這個答案。 – alex 2010-12-10 13:44:19

0

在您的正則表達式正斜槓是正則表達式分隔符。當你正在處理的標籤,更好的使用另一個分隔符(而不是用一個反斜槓吧):

$matches = preg_replace("#<object(.+?)</object>#", "replacing string", $str); 

還有其他delimiteres了。您可以使用任何非字母數字,非反斜槓,非空白字符。但是,在任何情況下都不應該使用某些分隔符:|,+,*和括號/括號,例如,因爲它們經常在正則表達式中使用,只會混淆人並使他們恨你。

順便說一句,使用HTML的正則表達式是一個Bad Thing

0

將第一個字符作爲分隔符char將表達式與標誌分開。因此,這樣的:

"/[a-z]+/i" 

...的內部分爲這樣:

- Pattern: [a-z]+ 
- Flags: i 

所以這個:

"/<object(.+?)</object>/" 

...是不是一個有效的正則表達式。試試這個:

"@<object(.+?)</object>@"