RegEx:第一次出现模式

时间:2011-04-02 21:23:08

标签: c# regex

我有一个类似

的字符串

[...] <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 =''?

2 个答案:

答案 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();
}