2010-12-10 68 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>@"