我有一个类似
的字符串 [...] <a rel=\"nofollow\" class=\"username offline popupctrl\" href=\"http://....html\" title=\"T3XTT0F1ND is offline\" id=\"...\">\">\">\">"[...]
如果我将模式设置为
"<a rel=\"nofollow\" (.+) id=\"(.+)(?=\")"
我得到T3XTT0F1ND“&gt;”&gt;“&gt;而不只是群组[2] .Value中的T3XTT0F1ND。 如何设置RegEx不仅可以找到第一个可能出现的'a rel =“nofollow”......'而且还有'id =''?
答案 0 :(得分:1)
你不应该为标题多做一个(),比如
<a rel=\"nofollow\" (.+) title=\"(.+)\" id=\"(.+)(?=\")
这会导致群组[2]返回 T3XTT0F1ND离线。
此外,您的意思是 ID 等于 T3XTT0F1ND ,您的群组捕获的内容超过此数量?如果答案是肯定的,那么您可以尝试下面的正则表达式
<a rel=\"nofollow\" (.+) id=\"(.+)[^>]\"
答案 1 :(得分:0)
这适用于A标记,其中ID属性始终遵循REL属性。 ID值被捕获到捕获组1中:
Regex regexObj = new Regex(
@"<a\b # Open start tag delimiter
[^>]*? # Everything up to REL attrib
\b rel=""nofollow"" # REL attrib.
[^>]*? # Everything up to ID attrib
\b id=""([^""]*)"" # $1: ID attrib.
[^>]* # Everything up to end of start tag.
> # Close start tag delimiter",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
resultList.Add(matchResult.Groups[1].Value);
matchResult = matchResult.NextMatch();
}