2010-08-27 63 views
0

HTML的解析表達式(正則表達式)可能重複:
RegEx match open tags except XHTML self-contained tags經常在PHP

我被困在怪異的正則表達式的問題,我解析一些HTML表PHP。

正則表達式我使用的是:<td[^>]*>(h.*?)</td>

<td>other data</td> <td>other data</td><td>Data_needed</td> <td>--</td> 

但其匹配的所有其他數據了。

現在我想將它匹配<td>Data_needed</td> <td>--</td>

我嘗試了一些正則表達式這給像

other data</td> <td>other data</td><td>Data_needed</td> <td>-- 

從第一<td>開始輸出持續</td>

但我想Data_needed<td>Data_needed</td> <td>--</td>

+0

我希望我有2K點很快,所以我可以投票關閉這樣的話題也是如此。 – fabrik 2010-08-27 14:24:11

+1

位置:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – shamittomar 2010-08-27 14:24:54

+0

他有一個單子列表​​s ..如果那是因爲因爲它是複雜的,那麼正則表達式完全可以使用 – 2010-08-27 14:31:10

回答

8

Do not use regex for parsing HTML or XML (including XHTML). Ever.

改爲使用HTML或XML解析器。快速搜索「php html parsing」出現this tool, Simple HTML DOM, as the first hit。 PHP還內置DOMSAX工具。

+2

Obligatory link:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags/1732454#1732454 – Oded 2010-08-27 14:24:47

+0

@Oded:我打算把它挖起來。謝謝。我讓我的第一句話鏈接到那篇文章。 – 2010-08-27 14:28:50

+0

@Thomas,「挖起來」。你好,老鄉http://digg.com用戶。 – shamittomar 2010-08-27 14:30:30

3

您可以改爲使用Simple HTML DOM

寫在PHP5 +

一個HTML DOM解析器讓 你在一個非常簡單的方式 操作HTML!

+0

我特別需要正則表達式在這種情況下,感謝您的回答 – Kevin 2010-08-27 14:38:30

+0

建議第三方替代[SimpleHtmlDom](http://simplehtmldom.sourceforge.net/)實際使用[DOM ](http://php.net/manual/en/book.dom.php)而不是字符串分析:[phpQuery](http://code.google.com/p/phpquery/),[Zend_Dom](http ://framework.zend.com/manual/en/zend.dom.html),[QueryPath](http://querypath.org/)和[FluentDom](http://www.fluentdom.org)。 – Gordon 2010-08-27 14:57:56

+0

謝謝戈登,但我不解析所有的頁面和元素,我只需要從整個頁面的一件事:) – Kevin 2010-08-27 15:15:03

0

一般的HTML解析不應該使用正則表達式來完成,但是如果你的HTML很簡單,沒有嵌套,你可以嘗試

.*<td[^>]*>(.*?)</td>\s*<td>--</td> 
+0

以及它不工作:( – Kevin 2010-08-27 14:37:08