我正在尝试从网站中解析一些数据。问题是javascript生成数据,因此我无法使用HTML解析器。源代码中的字符串如下所示:
<a href="http:www.domain.compid.php?id=123">
除了=后面的id,一切都是常数。我不知道字符串会发生多少次。如果可能,请欣赏有关正则表达式示例的任何帮助和解释。
答案 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] + ",";
}
}