我需要通过正则表达式解析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
如果Keys是常量且值正在改变,我该如何解决这个问题呢?
提前致谢, 迈克尔
答案 0 :(得分:5)
使用
<TD>([^<]*)</TD><TD>KEY2</TD>
代替。您的延迟量词将确保最短匹配,但是从第一个匹配位置。在这种情况下,从第一个<TD>
开始。上面的解决方案通过限制可能出现在值中的字符来回避问题,因此它不会跨越多个标签。
答案 1 :(得分:1)
我不知道你正在使用什么语言,但如果它是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
)