以下代码给我一个错误“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);
答案 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
(不应该使用),它已经全局替换。
答案 2 :(得分:1)
由于你使用/
字符启动正则表达式,它是一个分隔符,你应该在正则表达式中转义/
的所有出现。因为第二个/
之后的第一个字符是?
,所以它被解释为修饰符。