正则表达式从HTML文档中的<img/>标记中提取特定网址

时间:2011-07-20 20:04:01

标签: php html regex pattern-matching

我正在尝试从某些内容的主体中提取特定的url模式,并将其替换为新形成的url。但是我的正则表达式模式遇到了问题,想看看你是否可以帮助我。

以下是我正在测试的代码:

$body = '<p><img src="/file/637/view" height="540" width="640"></p>';
$pattern = '/src="/file/(0-9)+/view"/';
$pattern = '/src="/file/(.)+/view"/';
$pattern = '/"/file/[0-9]+/view"';
$pattern = '/\<img src="(.)+"(.)+"\>/';

preg_match($pattern, $body, $matches);

现在,最后一个模式将抓取整个图像标记,这很棒,但我想要它提取所有使用“/ file /(某些数字)/视图”模式的图像网址(只是网址)这样我就可以形成新的网址,然后对它们进行字符串替换。当我在$ matches var。

上运行print_r时,所有其他人都找不到任何东西

显然,正文字符串代表我正在扫描的内容正文。有关如何使其工作并抓住图像网址的任何建议?这必须适用于多个图像与许多其他html混合的情况,包括锚标记。

2 个答案:

答案 0 :(得分:1)

尝试将(.)替换为(.*?)或针对您的问题,请尝试按照

进行操作
$body = '<p><img src="/file/637/view" height="540" width="640"></p>';
$pattern = '/\/file\/([0-9]+)\/view/';


preg_match($pattern, $body, $matches);

答案 1 :(得分:0)

你需要逃避斜线,我认为你有一些未转义的斜线

试试这个:

$body = '<p><img src="/file/637/view" height="540" width="640"></p>';
$pattern = '/<img src="\/file\/([0-9]+)\/view"/'

preg_match($pattern, $body, $matches);

echo ($matches[1]);