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

我想將/prefix附加到那些沒有使用絕對路徑的url(以/開頭),上面的工作,但相當醜陋。如何在PHP中編寫這樣的正則表達式?

有沒有更優雅的解決方案?

回答

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); 
+0

因爲可能有一大堆的東西之前'URL(「''... $ contents'來自一個css文件 – wamp 2010-08-27 06:26:22

+1

-1這是壞的 – NullUserException 2010-08-27 06:29:18

1

試試這個:

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

這是非常類似於你的正則表達式,但是我不認爲如果你想使用正則表達式的話有很大的改進空間。

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

+0

不,這也會將前綴追加到絕對路徑,比如'url(「/ testuri」' – wamp 2010-08-27 06:49:12

+0

@wamp它已被修復,de mo更新爲 – Aillyn 2010-08-27 06:55:50

+0

請使用'$ contents ='url(「/ test/what」)進行測試,並且您的代碼將失敗。正如我可以預測的那樣,它將和我的一樣。 – wamp 2010-08-27 06:57:26

0

使用負的樣子:

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

輸出:

url("/prefix/test/what")