$contents = 'url("/test/what)';
echo preg_replace('/url\(([\'"]?)(?!(?:[a-z]+:)|\/|[\'"]\/)/i', 'url(\1'. '/prefix' . '\2', $contents);
我想將/prefix
附加到那些沒有使用絕對路徑的url(以/
開頭),上面的工作,但相當醜陋。如何在PHP中編寫這樣的正則表達式?
有沒有更優雅的解決方案?
$contents = 'url("/test/what)';
echo preg_replace('/url\(([\'"]?)(?!(?:[a-z]+:)|\/|[\'"]\/)/i', 'url(\1'. '/prefix' . '\2', $contents);
我想將/prefix
附加到那些沒有使用絕對路徑的url(以/
開頭),上面的工作,但相當醜陋。如何在PHP中編寫這樣的正則表達式?
有沒有更優雅的解決方案?
,如果你的問題是你貼什麼(即獲得一個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);
試試這個:
$regex = '~url\(([\'"]?)(?!/|[^:]+://)~';
echo preg_replace($regex, 'url($1' . '/prefix/', $contents);
這是非常類似於你的正則表達式,但是我不認爲如果你想使用正則表達式的話有很大的改進空間。
使用負的樣子:
$contents = 'url("/test/what")';
$prefix = '/prefix';
$regex = '~url\(([\'"]?)(?!>/|[^:]+://)~';
echo preg_replace($regex, 'url($1' . $prefix, $contents),"\n";
輸出:
url("/prefix/test/what")
因爲可能有一大堆的東西之前'URL(「''... $ contents'來自一個css文件 – wamp 2010-08-27 06:26:22
-1這是壞的 – NullUserException 2010-08-27 06:29:18