2012-05-18 43 views
0

我有一個CSS串這樣的替換文件路徑,只是文件名中的字符串:正則表達式使用PHP

$string = "div#test {background: url(images/test.gif); width:100px; } div#test2 {background: url(../images/test2.gif); } "; 

基本上我希望能夠更換URL之間的一切()只是文件名。因此,它最終看起來像:

$string = "div#test {background: url(test.gif); width:100px; } div#test2 {background: url(test2.gif); } "; 

有點像應用基本名稱,但爲相對URL和所有這些實例。

任何想法?

+0

這是什麼都與做[DOM] (http://stackoverflow.com/questions/tagged/dom)?你有沒有調查過什麼? - 對於正則表達式構造有一些工具,請參閱[開源RegexBuddy替代品](http://stackoverflow.com/questions/89718/is-there)和[在線正則表達式測試](http://stackoverflow.com/questions/32282 /正則表達式測試) – mario

回答

0

試試這個:

編輯:我定的正則表達式

<?php 

$string = "div#test {background: url(images/test.gif); width:100px; } div#test2 {background: url(../images/test2.gif); } "; 
$output = preg_replace('/([\.\w\/]*\/)/', '', $string); 

var_dump($output); 
string(93) "div#test {background: url(test.gif); width:100px; } div#test2 {background: url(test2.gif); } " 
?> 
+0

非常感謝。非常豐富。 – Ashesh

0

理所當然,美都存儲在一個變量文件名,你可以使用

$string = preg_replace('~url(.+)~', 'url(' . $filename . ')', $string); 

WWW。 regular-expressions.info是一個很好的來源,如果你想學習正則表達式

+0

好吧,不,我沒有存儲文件名。 – Ashesh

+0

帶插孔的解決方案。或者,你可能必須寫3-4行代碼才能獲得文件名。 –

0

假設你不想「T不得不在一個字符串匹配多個div的,你可以做這樣的事情:

preg_replace(
    '@(.+url\()/?([^/]+/)*([^)]+)(\).+)@', 
    '\\1\\3\\4', 
    'div#test {background: url(images/test.gif); width:100px; }' 
); 

這也可以讓你通過與多個字符串替換陣列

+0

並讓我想過濾出任何絕對URL組件(http/https/ftp),我可以用(ht | f)tp(s |)進行OR操作:\/\ /) – Ashesh