【发布时间】:2018-03-03 12:33:28
【问题描述】:
在我们的一个项目中,我们在 php 中附加了一个不以“http”、“website”或“vendor”开头的特定路径的 css 背景图像 url,到目前为止,我们的表达式做得很好,但它也包括起始引用结果。任何帮助都会得到帮助
这是我的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)
感谢您的任何帮助,在此先感谢您。
【问题讨论】:
-
这不是从匹配中排除的正确方法。您将括号与括号混淆了。试试
url\s*\(\s*[\'"]?+\/?+((?!http|vendor|website).+?)[\'"]?\s*\)
标签: php regex preg-match pcre