如何在PHP中编写这样的正则表达式?

时间:2010-08-27 06:15:08

标签: php regex

$contents = 'url("/test/what)';
echo preg_replace('/url\(([\'"]?)(?!(?:[a-z]+:)|\/|[\'"]\/)/i', 'url(\1'. '/prefix' . '\2', $contents);

我想将/prefix附加到那些没有使用绝对路径的网址(以/开头),上面有效,但是非常难看。

有更优雅的解决方案吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

$regex = '~url\(([\'"]?)(?!/|[^:]+://)~';
echo preg_replace($regex, 'url($1' . '/prefix/', $contents);

这与你的正则表达式非常相似,但如果你想使用正则表达式,我认为还有很大的改进空间。

演示:http://ideone.com/qeHna

答案 1 :(得分:0)

如果你的问题正是你发布的(即正确设置了css背景属性)那么为什么不只是:

if (substr($contents, 5, 1) != '/') 
    $contents = 'url("/prefix/' . substr($contents, 5);

编辑: 或者“如果在url之前可以有一大堆东西(”“那么

$pos = strpos($contents, 'url("') + 5;
if (substr($contents, $pos, 1) != '/')
   $contents = substr($contents, 0, $pos) . '/prefix/' . substr($contents, $pos);

答案 2 :(得分:0)

使用负向前看:

$contents = 'url("/test/what")';
$prefix = '/prefix';
$regex = '~url\(([\'"]?)(?!>/|[^:]+://)~';
echo preg_replace($regex, 'url($1' . $prefix, $contents),"\n";

输出:

url("/prefix/test/what")