2010-06-23 155 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)修饰符匹配非贪婪。