preg_replace()[function.preg-replace]:未知的修饰符'?'

时间:2012-09-19 09:23:11

标签: php regex

以下代码给我一个错误“preg_replace()[function.preg-replace]:未知的修饰符'?'”

$str = 'background: url("../../dsdgsd/contain.jpg");';

echo preg_replace('/url\s?\(\s?(\"|\')([../?]*[a-z/]*?[/?]?)([a-z0-9_-]*[.][jpg|jpeg|png|jpeg]*)([\'|\"]\))/gi','url("../images/$3")',$str);

3 个答案:

答案 0 :(得分:2)

我不确定这个正则表达式应该做什么,但是错误是因为模式中有/个字符。解析器然后认为您的模式已完成,并将其后的所有内容(在本例中为?)作为修饰符。因此错误。

使用其他分隔符修复:(大多数人在处理大量#时使用/

echo preg_replace('#url\s?\(\s?(\"|\')([../?]*[a-z/]*?[/?]?)([a-z0-9_-]*[.][jpg|jpeg|png|jpeg]*)([\'|\"]\))#i','url("../images/$3")',$str);

(除此之外,如上所述,不需要g修饰符)

答案 1 :(得分:1)

对于preg_replace,没有必要使用global修饰符g(不应该使用),它已经全局替换。

There is no g modifier in php.

答案 2 :(得分:1)

由于你使用/字符启动正则表达式,它是一个分隔符,你应该在正则表达式中转义/的所有出现。因为第二个/之后的第一个字符是?,所以它被解释为修饰符。