我的谜题:作为PHP newby,我试图使用正则表达式从字符串中提取一些数据,但我找不到正确的语法。
字符串的内容被删除为来自网站的几个图像的html,我希望最终输出为3个单独的变量:“$ Number1”,“$ Number2”和“$ Status”。
输入字符串$ html:
的内容示例<div id="system">
<img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><img alt=".5" height="35" src="/images/numbers/point5.jpg" style="margin-left: -4px" width="26" /><img alt="system statusA" height="35" src="/images/numbers/statusA.jpg" width="37" /><img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><img alt="1" height="35" src="/images/numbers/1.jpg" width="18" /><img alt=".0" height="35" src="/images/numbers/point0.jpg" style="margin-left: -4px" width="26" />
</div>
此字符串中可能出现的值为:
结果应该是变量:
代码:
$regex = '\balt='(.*?)';
preg_match($regex,$html,$match);
var_dump($match);
echo $match[0];
可能我必须分多步执行此操作或使用其他功能,谁可以帮助我?
答案 0 :(得分:0)
你应该问自己的第一件事是:“我的输入数据采用何种格式”。因为在这种情况下它显然是HTML的片段,所以您应该将该片段提供给HTML解析器,而不是正则表达式引擎。
我不知道确切的函数名称,但您的代码应如下所示:
$htmltext = '<div id="system">[...]</div>';
$htmltree = htmlparser_parse($htmltext);
$images = $htmltree->find_all('img');
foreach ($images as $image) {
echo $image->src;
}
因此,您需要找到一个将字符串解析为节点树的HTML解析器。节点应该具有基于CSS类,元素名称或节点ID在其中查找节点的方法。对于Python,这个库名为 BeautifulSoup ,对于Java,它是 JSoup ,我确信PHP有类似的东西。
simplehtmldom提供的示例看起来很有希望。
答案 1 :(得分:0)
答案 2 :(得分:0)
你想要的只是alt?试试这个xpath示例:
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXpath($doc);
foreach($xpath->query('//img/@alt') as $node){
echo $node->nodeValue."\n";
}