1

以下代码给了我一个错误“preg_replace() [function.preg-replace]: Unknown modifier '?'”

$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);
4

3 回答 3

2

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

通过使用另一个分隔符进行修复:(大多数人#在处理大量 时使用/

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

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

于 2012-09-19T09:27:53.410 回答
1

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

php 中没有 g 修饰符。

于 2012-09-19T09:25:12.533 回答
1

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

于 2012-09-19T09:28:23.177 回答