我需要通过正则表达式解析一个 HTML 字符串,如果 KEY 位于我需要提取的 VALUE 之后。
示例原始字符串:
<TR><TD>VAL1</TD><TD>KEY1</TD></TR><TR><TD>VAL2</TD><TD>KEY2</TD></TR>
当我尝试使用以下方法提取 VAL2 时:
<TD>(.*?)</TD><TD>KEY2</TD>
我实际上得到
VAL1KEY1VAL2
假设键是恒定的并且值在变化,我该如何解决这个问题?
在此先感谢,迈克尔
我需要通过正则表达式解析一个 HTML 字符串,如果 KEY 位于我需要提取的 VALUE 之后。
示例原始字符串:
<TR><TD>VAL1</TD><TD>KEY1</TD></TR><TR><TD>VAL2</TD><TD>KEY2</TD></TR>
当我尝试使用以下方法提取 VAL2 时:
<TD>(.*?)</TD><TD>KEY2</TD>
我实际上得到
VAL1KEY1VAL2
假设键是恒定的并且值在变化,我该如何解决这个问题?
在此先感谢,迈克尔
利用
<TD>([^<]*)</TD><TD>KEY2</TD>
反而。您的惰性量词将确保最短匹配但从第一个匹配位置开始。在这种情况下,从第一个<TD>. 上面的解决方案通过限制可以出现在一个值中的字符来回避这个问题,因此它永远不会跨越多个标签。
我不知道您使用的是什么语言,但如果是 PHP,我认为您最好使用DOM,而不是使用正则表达式解析它。
这是一种方法:
<?php
$html="<TR><TD>VAL1</TD><TD>KEY1</TD></TR><TR><TD>VAL2</TD><TD>KEY2</TD></TR>";
$doc = new DOMDocument();
$doc->loadHTML($html);
print_r($doc->getElementById(1)->tagName);
$output=array();
$n=0;
while ($val = $doc->getElementsByTagName('td')->item($n++)) {
$key = $doc->getElementsByTagName('td')->item($n++);
$output[$key->textContent]=$val->textContent;
}
print_r($output);
这是我运行它时显示的内容。
Array
(
[VAL1] => KEY1
[VAL2] => KEY2
)