2011-11-20 157 views
1

我的拼圖:作爲一個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]; 

也許我不得不這樣做在多個步驟或使用其他功能,誰可以幫幫我嗎?

回答

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提供的示例看起來很有前途。

0

你只想要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