2012-06-14 52 views
1

我有一個困難的正則表達式的問題。我有這樣的表情來檢測絕對URL(http和httpsPHP的正則表達式:CSS相對於絕對

/(url {0,}\(({0,}'| {0,}"|))(?!http|data\:).*?\)/im 

我想基本上做的是與preg_replace在我的腳本定義的路徑$path預先設置的URL基本上在兩個捕獲組這個表達式的結果: ?

group 1: (url {0,}\(({0,}'| {0,}"|))(?!http).*?\) 

group 2: ({0,}'| {0,}"|) 

我怎麼能一路匹配,直到URI開始,然後用$path前面加上它,我似乎無法得到捕獲組右

+0

你能詳細說明你到底在做什麼嗎?你是否想要替換單個CSS文件中的所有路徑?多個CSS文件?是否有多條路徑需要更換?如果只是一個文件做一個簡單的查找和替換文本編輯器可能被證明是最快的解決方案。 – Jrod

+0

基本上我有一個加載所有加載的CSS文件的wordpress插件。它將它們組合並將它們寫入到不同位置的文件中。但是,相對資源需要轉換爲絕對值才能加載 –

回答

2

您可以使用這樣的事情:

$re = '/\b url \s*+ \(\s*+ (?| " ([^"]*+) " | \' ([^\']*+) \' | (\S*+)) \s*+ \) /ix'; 

$str = preg_replace_callback($re, function ($match) { 
    $url = $match[1]; 
    // do some check on the url 
    if(whatever) 
     return $match[0]; // return without change 

    // do whatever you want with the URL 
    // return new url 
    return "url(\"$url\")"; 
}, $str);