从字符串,正则表达式中提取变量?
问题描述:
我的拼图:作为一个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>
其可出现在该字符串中的可能值为:
- 0.jpg
- 1.JPG
- 2.jpg
- 3.jpg
- 4.jpg
- 5.JPG
- 6.JPG
- 7.JPG
- 8.JPG
- 9.jpg
- point0.jpg
- point5.jpg
- statusA.jpg
- statusB.jpg
- statusC.jpg
- statusD.jpg
- statusE.jpg
- statusF.jpg
结果应该是变量:
- “数字1”(XX.X)基于前两个数字(0 -9)和.0或.5
- 根据状态
- 基于最后两个数字(0-9)和.0或.5的“Number2”(XX.X)的“Status”(statusX)
到目前为止的代码:
$regex = '\balt='(.*?)';
preg_match($regex,$html,$match);
var_dump($match);
echo $match[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提供的示例看起来很有前途。
答
你只想要ALT的?试试这个xpath的例子:
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXpath($doc);
foreach($xpath->query('//img/@alt') as $node){
echo $node->nodeValue."\n";
}
谢谢,这个工程。用|作为分隔符返回:'1 | 3 | .5 | statusB | 8 | 5 | .0 |'。但我怎样才能得到这个值到一个字符串?我需要使用爆炸将它进一步分成3个字符串。 – JERO79
解决方法使用:foreach($ xpath-> query('// img/@ alt')as $ node){ $ input [] = $ node-> nodeValue; } – JERO79