【发布时间】:2012-05-26 08:46:23
【问题描述】:
我正在尝试使用正则表达式替换 PHP 中的源属性(可以是图像或任何标签)。
我有一个这样的字符串:
$string2 = "<html><body><img src = 'images/test.jpg' /><img src = 'http://test.com/images/test3.jpg'/><video controls="controls" src='../videos/movie.ogg'></video></body></html>";
我想把它变成:
$string2 = "<html><body><img src = 'test.jpg' /><img src = 'test3.jpg'/><video controls="controls" src='movie.ogg'></video></body></html>";
这是我尝试过的:
$string2 = preg_replace("/src=["']([/])(.*)?["'] /", "'src=' . convert_url('$1') . ')'" , $string2);
echo htmlentities ($string2);
基本上它没有改变任何东西,并给了我一个关于未转义字符串的警告。
$1 不发送字符串的内容吗?这里有什么问题?
convert_url 的功能来自我之前在这里发布的一个示例:
function convert_url($url)
{
if (preg_match('#^https?://#', $url)) {
$url = parse_url($url, PHP_URL_PATH);
}
return basename($url);
}
应该去掉 url 路径,只返回文件名。
【问题讨论】:
-
原来的字符串和你想把它变成的都是空字符串——有什么遗漏吗?
-
你真的不应该用正则表达式解析 HTML。如果您搜索 SO,您应该找到一个非常全面的答案。同时,我可以建议 DOM 或 SimpleXML
-
我的意思是尝试将正则表达式中的所有“替换为\”,但不是第一个和最后一个
-
另外,如果你想使用正则表达式并且想在替换中使用一个函数,你需要
preg_replace_callback。你不能像你那样做convert_url('$1'),因为这是在 $1 存在之前评估的。