【发布时间】:2011-01-23 06:55:24
【问题描述】:
我的价值 1
我需要“我的价值 1”,请帮助我。 C#语言
【问题讨论】:
-
标签是否总是相同的格式(例如 3 层深,一个 tr、一个 td 和一个字体)
-
你用什么语言来解析这个?
我的价值 1
我需要“我的价值 1”,请帮助我。 C#语言
【问题讨论】:
试试:
/<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td>\s*<\/tr>/i
在 PHP 中使用:
<?php
if(preg_match('/<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td>\s*<\/tr>/i',
'<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>',$matches))
echo $matches[1]; // prints My Value 1
?>
【讨论】:
function stripTags(markup){
return markup.replace(/\s*<[^>]*?>\s*/gim,'');
}
假设您真正想要的只是上面“我的价值 1”表示的内部文本。
【讨论】:
您无法使用正则表达式正确解析 HTML,因为正则表达式无法处理 HTML 允许的嵌套。要正确地做到这一点。对于您显示的那一行,您可以使用正则表达式,但您不能指望该行保持相同,因此通常必须使用 SAX/DOM 来完成任务。
【讨论】:
由于 HTML 代码非常“不可预测”,我建议使用 HTML 解析工具包。您使用哪种编程语言?在 .NET 中,我使用 HTML Agility Pack 取得了巨大成功。在 Java 中,HTML Parser 可能很方便(尽管我还没有使用它)。
【讨论】:
如果您使用的是 PHP,请在 </FONT> 上拆分
$string='<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>';
$s = explode('</FONT>',$string);
foreach ($s as $v){
if ( strpos($v,"<FONT") !==FALSE) {
$t = explode(">",$v);
print end($t)."\n";
}
}
输出
$ php test.php
My Value 1
【讨论】:
在 perl 中我会使用
my $string='<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>';
$string =~ m/(<.*?>)*([^<]*)(<.*?>)*/;
print $2;
得到想要的结果。最后一部分不是绝对必要的,
(<.*?>)*([^<]*)
也可以
【讨论】:
如果你想获取标签内的内容,我认为下面的正则表达式就足够了:
^<.*>([^<>]+)<.*>$
只有在标签之间确实有任何数据时才会起作用,否则它将给出不匹配。
【讨论】:
我认为使用正则表达式解析 HTML 不是一个明智的想法,正如 spa 所强调的那样。 以前对类似问题的经典答案是RegEx match open tags except XHTML self-contained tags
【讨论】:
c#语言
string input = "<tr><TD><FONT size=\"2\">My Value 1</FONT></TD></tr>";
string pattern = @"<[^>]*?>";
string output = Regex.Replace(input, pattern, ""); //My Value 1
只是为了删除所有的html标签。
【讨论】: