正则表达式使用php将文件路径替换为字符串中的文件名

时间:2012-05-18 15:09:36

标签: php regex dom

我有一个像这样的css字符串:

$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); } ";

类似于应用基本名称,但是用于相对网址和所有此类实例。

有什么想法吗?

3 个答案:

答案 0 :(得分: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); } "
?>

答案 1 :(得分:0)

理所当然地认为你有一个存储在变量中的文件名,你可以使用

$string = preg_replace('~url(.+)~', 'url(' . $filename . ')', $string);
如果你想学习正则表达式,

www.regular-expressions.info是一个很好的资源

答案 2 :(得分:0)

假设您不必在一个字符串中匹配几个div,您可以执行以下操作:

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

这也允许您传递一个包含多个字符串的数组来替换