我需要通過正則表達式解析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
我該如何解決這個問題,假設鑰匙是不變的,價值在變化?
由於提前, 邁克爾
我需要通過正則表達式解析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
我該如何解決這個問題,假設鑰匙是不變的,價值在變化?
由於提前, 邁克爾
使用
<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
)
你怎麼知道它是PHP之後呢? – Joey
+1不發佈YAPPeR(「另一個僞解析正則表達式」)。 –
@喬伊 - 好點。我想我一直在閱讀太多同樣的問題。回答相應編輯。 – ghoti