Regex 从字符串、正则表达式中提取变量?

Regex 从字符串、正则表达式中提取变量?,regex,string,variables,screen-scraping,preg-match,Regex,String,Variables,Screen Scraping,Preg Match,我的难题:作为一名PHP新手,我试图使用正则表达式从字符串中提取一些数据,但我找不到正确的语法 字符串的内容是从一个网站的几个图像的html抓取的,我希望最终的输出是3个独立的变量:“$Number1”、“$Number2”和“$Status” 输入字符串$html的内容示例: <div id="system"> <img alt="2" height="35" src="/images/numbers/2.jpg" width="18" /><i

我的难题:作为一名PHP新手,我试图使用正则表达式从字符串中提取一些数据,但我找不到正确的语法

字符串的内容是从一个网站的几个图像的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>

可能我必须分多个步骤或使用另一个函数,谁能帮助我?

首先你应该问自己:“我的输入数据是什么格式的?”。因为在本例中它显然是一个HTML片段,所以应该将该片段提供给HTML解析器,而不是正则表达式引擎

我不知道确切的函数名,但您的代码应该如下所示:

$htmltext = '<div id="system">[...]</div>';
$htmltree = htmlparser_parse($htmltext);
$images = $htmltree->find_all('img');
foreach ($images as $image) {
  echo $image->src;
}
$htmltext='[…]';
$htmltree=htmlparser\u parse($htmltext);
$images=$htmltree->find_all('img');
foreach($images作为$image){
echo$image->src;
}
因此,您需要找到一个HTML解析器,将字符串解析为节点树。节点应该有基于CSS类、元素名或节点ID查找其内部节点的方法。对于Python,这个库被称为BeautifulSoup,对于Java,它是JSoup,我相信PHP也有类似的功能

提供的示例看起来很有希望。

可能是DOM:


也请参见

您只需要alt?请尝试以下xpath示例:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXpath($doc);

foreach($xpath->query('//img/@alt') as $node){
    echo $node->nodeValue."\n";
}

谢谢,这很有效。使用| as分隔符返回:“1 | 3 |.5 | statusB | 8 | 5 |.0 |”。但是我怎样才能把这个值转换成字符串呢?我需要使用explode将其进一步拆分为3个字符串。使用以下方法解决:foreach($xpath->query('//img/@alt')as$node){$input[]=$node->nodeValue;}
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXpath($doc);

foreach($xpath->query('//img/@alt') as $node){
    echo $node->nodeValue."\n";
}