2010-06-23 129 views
0

好的,所以這是我的問題。我試圖在PHP中編寫一個腳本來解析我們的工作訂單系統並返回一組票據,但我遇到了一些試圖解析票單列表的問題。我一直試圖儘可能多地使用正則表達式來強迫自己學習語法,我可以認爲這應該起作用,但可惜,這不是,所以我來這裏尋求你的集體智慧。正則表達式來提取匹配之間的文本塊

<tr> 
    ... 
    ... 
    ... 
    ... 
</tr> 

我想在這裏檢索標記之間的塊,以便我可以再次解析特定信息。塊大小非常規則,但標籤之間的線條可能會因票據中的描述長度而異。我目前使用的正則表達式是

/<tr>(.+)<\/tr>/ 

這似乎達到我的目的最小的方式,但我正在從錯誤的preg_match。我知道我可以標誌和循環它在這個非常非常粗糙的僞代碼

if /<tr>/ then { 
    while != /<\/tr>/ { 
     store line 
    } 
} 

但是在這裏我的目標是更好地瞭解正則表達式,以及如何使用它的。

+0

您的意思是「/ (。+)<\/tr> /」? – 2010-06-23 16:16:14

+0

你的問題是什麼? – Sjoerd 2010-06-23 16:18:19

+0

哈哈對不起。它不工作。我想知道你們如何去做我想做的事情。我很難弄清楚我的正則表達式有什麼問題。 – Melignus 2010-06-23 16:29:50

回答

1

使用Simple HTML DOM

正則表達式解析html是一團糟。

+0

總之是的。對不起,選擇這個答案花了這麼長時間,但我找出了問題所在。我試圖解析正則表達式的大塊文本。我通過投入一些下一個循環來固定它,以跟蹤我的特定標籤有多深。好消息是,該應用程序的作品,現在如果網站上有日曆條目,我會在平日得到一條短信,甚至可以在一天內解析多個條目,爲我自己感到驕傲,並且比我原先想象的要容易。 – Melignus 2010-10-12 16:51:05

2
  • 也許你需要s (PCRE_DOTALL) modifier,以匹配多行。
  • 也許你想要.*?而不是.*,或者U(PCRE_UNGREEDY)修飾符匹配非貪婪。