Php Regex从<;img>;HTML文档中的标记

Php Regex从<;img>;HTML文档中的标记,php,html,regex,pattern-matching,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"/'; $pa

我试图从一些内容的主体中提取一个特定的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);
$body='

'; $pattern='/src=“/file/(0-9)+/view/”; $pattern='/src=“/file/()+/view/”; $pattern='/“/file/[0-9]+/view”; $pattern='/\/'; 预匹配($pattern,$body,$matches);
现在,最后一个模式将抓取整个图像标记,这很好,但我希望它提取所有使用“/file/(some number)/view”模式的图像url(仅url),以便我可以形成新的url,然后对其进行字符串替换。当我在$matches变量上运行print_r时,所有其他变量都找不到任何东西

显然,body字符串表示我正在扫描的内容体。关于如何让它工作并只抓取图像url,有什么建议吗?这必须适用于多个图像与大量其他html(包括锚定标记)混合的情况。

尝试用
(.*)
替换
(。
),或者针对您的问题,尝试以下操作

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


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

'; $pattern='/\/file\/([0-9]+)\/view/'; 预匹配($pattern,$body,$matches);
您需要避开斜杠,我认为您有一些未避开的斜杠

试试这个:

$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]);
$body='

';
$pattern='/真正的问题是,为什么要使用regex而不是xml解析?(相关)@tandu上次我检查时,在一小块内容上运行一个小regex(从资源角度看)比将html段解析为对象,然后对其运行操作并从对象将其转换回html更便宜。所以,除非你有一个令人信服的论点,关于如何更有效地解析HTML,修改它,然后将它转换回来,我想我会坚持使用正则表达式。你的意思是这样的吗$pattern='/src=“/file/(.*?)+/view/”;需要在那里转义一些斜杠(或者,最好是更改分隔符)。