2012-06-06 105 views
0

我需要通過正則表達式解析HTML字符串,KEY是否位於我需要提取的值後面。正則表達式 - 最短匹配

試樣原始字符串:

<TR><TD>VAL1</TD><TD>KEY1</TD></TR><TR><TD>VAL2</TD><TD>KEY2</TD></TR> 

當我試着使用提取VAL2:

<TD>(.*?)</TD><TD>KEY2</TD> 

我真正得到

VAL1KEY1VAL2 

我該如何解決這個問題,假設鑰匙是不變的,價值在變化?

由於提前, 邁克爾

回答

5

使用

<TD>([^<]*)</TD><TD>KEY2</TD> 

代替。你的懶惰量詞保證最短匹配但是從第一個匹配位置。在這種情況下,從第一個<TD>開始。上面的解決方案通過限制可能出現在值中的字符來回避問題,所以它不會跨越多個標籤。

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 
) 
+0

你怎麼知道它是PHP之後呢? – Joey

+0

+1不發佈YAPPeR(「另一個僞解析正則表達式」)。 –

+0

@喬伊 - 好點。我想我一直在閱讀太多同樣的問題。回答相應編輯。 – ghoti