.NET正则表达式问题

时间:2011-02-23 02:26:04

标签: c# regex parsing

我正在尝试从网站中解析一些数据。问题是javascript生成数据,因此我无法使用HTML解析器。源代码中的字符串如下所示:

<a href="http:www.domain.compid.php?id=123">

除了=后面的id,一切都是常数。我不知道字符串会发生多少次。如果可能,请欣赏有关正则表达式示例的任何帮助和解释。

2 个答案:

答案 0 :(得分:2)

你需要保存它吗?毯式正则表达式href="[^"]+">将匹配整个字符串。如果您需要保存特定部分,请与我们联系。

编辑:要保存ID,请注意id=之后的paren,表示捕获它。然后要检索它,请使用匹配对象的“组”字段。

string source = "a href=\"http:www.domain.compid.php?id=123\">";
Regex re = new Regex("href=\"[^\"]+id=([^\"]+)\">");

Match match = re.Match(source);
if(match.Success)
{
    Console.WriteLine("It's a match!\nI found:{0}", match.Groups[0].Value);
    Console.WriteLine("And the id is {0}", match.Groups[1].Value);
}

编辑:使用MatchCollection

的示例
MatchCollection mc = re.Matches(source);

foreach(Match m in mc)
{
    //do the same as above. except use "m" instead of "match"
    //though you don't have to check for success in each m match object 
    //since it wouldn't have been added to the MatchCollection if it wasn't a match
}

答案 1 :(得分:0)

这是在javascript中解析并创建一个csv-string:

var re = /<a href="http:www.domain.compid.php\?id=(\d+)">/;
var source = document.body.innerHTML;
var result = "result: ";

var match = re(source);
while (match != null) {
    result += match[1] + ",";
    source = source.substring(match.index + match[0].length);
    match = re(source);
}

Demo。如果html-content不用于服务器上的任何其他内容,则应该足以发送id。

编辑,为了提高性能和可靠性,最好使用内置的javascript函数(或jQuery)来查找网址,而不是搜索整个内容:

var re = /www.domain.compid.php\?id=(\d+)/;
var as = document.getElementsByTagName('a');    
var result = "result: ";

for (var i = 0; i < as.length; i++) {
    var match = re(as[i].getAttribute('href'));
    if (match != null) {
        result += match[1] + ",";
    }
}