在我们的一个项目中,我们在php中添加了某些路径的css背景图片网址,该路径不是以' http','网站'或者'供应商',到目前为止,我们的表达式表现良好,但它也包括结果中的起始引用。任何帮助都是适当的
这是我的PHP代码
$array=[
'url("images")',
'url (\'images\')',
'url(vendor/)',
'url(website/)',
"url(http://)"
];
$pattern = '/url\s*\(\s*[\'"]?\/?([^(http|vendor|website)].+?)[\'"]?\s*\)/i';
$result=[];
foreach ($array as $test_string) {
$content = preg_replace($pattern, 'url('.'websites/abc/www/'.'$1)', $test_string);
$result[$test_string] = $content;
}
var_dump($result);
,结果如下,请注意引用www /" images
array (size=5)
'url("images")' => string 'url(websites/abc/www/"images)' (length=29)
'url ('images')' => string 'url(websites/abc/www/'images)' (length=29)
'url(vendor/)' => string 'url(vendor/)' (length=12)
'url(website/)' => string 'url(website/)' (length=13)
'url(http://)' => string 'url(http://)' (length=12)
感谢任何帮助,谢谢你提前。
答案 0 :(得分:0)
您在正则表达式中将括号与括号混淆。前者定义了一个字符类,后者定义了一个组。要在匹配中否定模式,您应该使用负面的外观,这里负面的前瞻提供了解决方案。你最好在+
之后添加?
符号来制作引号并引导斜线占有率:
url\s*\(\s*[\'"]?+\/?+((?!http|vendor|website).+?)[\'"]?\s*\)
url\s*\(\s*
将url(
与括号周围的可能空格匹配[\'"]?+
引号的可选匹配,但如果匹配,则不允许回溯\/?+
斜线标记的可选匹配,但如果匹配则不允许回溯((?!http|vendor|website).+?)
捕获任何不以负向前瞻模式开头的内容[\'"]?\s*\)
直到url