0

我有一个损坏的 html 页面,不幸的是我无法用 xml/xcode 解析,所以我想出了正则表达式。我是一个正则表达式初学者,但我无法得到正确的结果。

来源

<td>FIELD:</td> <td>VALUE<td>

我想获得价值,这就是我卡住的地方

$regex = '{<td[^>]*<td>(.*?)</td>}';

编辑:结果我想要一个可以达到值的数组,所以我只对值感兴趣

我很感激每一个提示。

干杯

4

2 回答 2

1

试试这个:

'{<td>.*?</td>\s+<td>(.*?)</td>}'

但是您/在 html 文本中遗漏了 a 如果损坏,您的意思是在结束标记处缺少斜杠,您可以使用这个:

'{<td>.*?</?td>\s+<td>(.*?)</?td>}' 结束标签中的斜杠现在是可选的

于 2012-04-24T20:42:06.950 回答
0

您的正则表达式存在一些立即可见的问题;例如,<td[^>]*<td>不做你认为它做的事。但与其建议一个不同的正则表达式,让我敦促你做最理智的事情:

不要为此使用正则表达式!

相信我。不要这样做。其他人会来这里建议新的正则表达式模式,他们的模式都是错误的。正则表达式甚至无法胜任解析干净的 HTML/XML 的任务,因此尝试在任意损坏的代码上使用它是一种疯狂的做法。试试HTML Tidy,它是为这类事情而设计的。根据 HTML 的问题,像HtmlPurifierBeautiful Soup这样的解析器也可能能够使用它。

这可能看起来需要更多的努力,但从长远来看,你会节省自己的时间。

于 2012-04-24T20:38:21.723 回答