下面的代码给我一个错误"preg_replace()函数.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);发布于 2012-09-19 17:27:53
我不确定这个正则表达式应该做什么,但是给出这个错误是因为模式中有/字符。然后,解析器认为您的模式已经完成,并将其后面的所有内容(在本例中为? )作为修饰符。因此出现了错误。
通过使用另一个分隔符进行修复:(大多数人在处理大量/时使用# )
echo preg_replace('#url\s?\(\s?(\"|\')([../?]*[a-z/]*?[/?]?)([a-z0-9_-]*[.][jpg|jpeg|png|jpeg]*)([\'|\"]\))#i','url("../images/$3")',$str);(除此之外,如前所述,不需要g修饰符)
发布于 2012-09-19 17:25:13
对于preg_replace,没有必要使用global修改器g (不应该使用),它已经全局替换。
There is no g modifier in php.
发布于 2012-09-19 17:28:23
由于正则表达式以/字符开头,因此它是一个分隔符,应该对正则表达式中出现的所有/进行转义。因为第二个/后面的第一个字符是?,所以它被解释为修饰符。
https://stackoverflow.com/questions/12491853
复制相似问题