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

问题描述:

我的拼图:作为一个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.j​​pg
  • 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"; 
} 
+0

谢谢,这个工程。用|作为分隔符返回:'1 | 3 | .5 | statusB | 8 | 5 | .0 |'。但我怎样才能得到这个值到一个字符串?我需要使用爆炸将它进一步分成3个字符串。 – JERO79

+0

解决方法使用:foreach($ xpath-> query('// img/@ alt')as $ node){ $ input [] = $ node-> nodeValue; } – JERO79