C#正则表达式解析HTML

C#正则表达式解析HTML,c#,html,regex,C#,Html,Regex,我的价值1 我需要“我的价值1”请帮助我。C语言试试: /<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td>\s*<\/tr>/i /\s*\s*(.*)\s*\s*/i 在PHP中使用: <?php if(preg_match('/<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td

我的价值1

我需要“我的价值1”请帮助我。C语言

试试:

/<tr>\s*<td>\s*<font.*?>(.*?)<\/font>\s*<\/td>\s*<\/tr>/i
/\s*\s*(.*)\s*\s*/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
?>
函数条带标记(标记){
返回标记。替换(/\s*]*?>\s*/gim',);
}

这假设您真正需要的是上面“My Value 1”表示的内部文本。

您无法使用正则表达式正确解析HTML,因为regexp无法处理HTML允许的嵌套。正确地做这件事。对于显示的那一行,可以使用regexp,但不能指望该行保持相同,因此通常必须使用SAX/DOM来完成任务

由于HTML代码非常“不可预测”,我建议使用HTML解析工具包。你使用哪种编程语言?在.NET中,我成功地使用了它。在JavaR中可能很方便(尽管我还没有使用过它)。

如果您使用的是PHP,请在

在perl中,我将使用

my $string='<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>';
$string =~ m/(<.*?>)*([^<]*)(<.*?>)*/;
print $2;
my$string='my Value 1';

$string=~m/()*([^如果您想获取标记中的内容,我认为下面的Regexp就足够了:

^<.*>([^<>]+)<.*>$
^([^]+)$

只有当标签之间的某个地方确实存在任何数据时,它才会起作用,否则它将给出一个不匹配的结果。

我认为使用正则表达式解析HTML不是一个明智的想法,正如spa强调的那样。 类似问题的经典答案是c语言

string input=“我的值1”;
字符串模式=@“]*?>”;
字符串输出=Regex.Replace(输入,模式,“”;//我的值1

只需删除所有html标记。

标记的格式是否始终相同(例如3层深,带有tr、td和字体)你用什么语言来解析这个?但是你可以用正则表达式解析一个固定的字符串,这个字符串恰好是HTML。虽然这样做有很多问题,但是OP可能没有这些问题。@Tom-同意。但是,尽管OP今天没有这些问题,他可能明天就会知道,希望他不会去想发生了什么.我只需要值“我的值1”@codaddict我需要c语言:-)
$ php test.php
My Value 1
my $string='<tr><TD><FONT size="2">My Value 1</FONT></TD></tr>';
$string =~ m/(<.*?>)*([^<]*)(<.*?>)*/;
print $2;
(<.*?>)*([^<]*)
^<.*>([^<>]+)<.*>$
 string input = "<tr><TD><FONT size=\"2\">My Value 1</FONT></TD></tr>";
 string pattern = @"<[^>]*?>";
 string output = Regex.Replace(input, pattern, ""); //My Value 1