PHP:无法使用preg_replace()替换

时间:2010-12-10 13:39:16

标签: php

我正在替换给定字符串中的object标签

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

但它显示错误为

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

出了什么问题?

3 个答案:

答案 0 :(得分:1)

必须引用</object>中的斜杠:<\/object>,否则它会被解释为正则表达式的结尾,因为您要用斜杠分隔它。整行应该是:

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

答案 1 :(得分:0)

在正则表达式中,正斜杠是正则表达式分隔符。在处理标记时,最好使用另一个分隔符(而不是用反斜杠转义它):

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

还有其他分隔符。您可以使用任何非字母数字,非反斜杠,非空白字符。但是,在任何情况下都不应使用某些分隔符:|+*和括号/括号,例如,因为它们经常在正则表达式中使用,并且会混淆人和让他们恨你。

顺便说一下,使用HTML的正则表达式是Bad Thing

答案 2 :(得分:0)

将第一个字符作为分隔符char,将表达式与标志分开。因此:

"/[a-z]+/i"

...内部分为:

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

所以这个:

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

...不是有效的正则表达式。试试这个:

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