2011-04-02 55 views
0

香港專業教育學院有一個字符串,它是這樣正則表達式:獲取模式的第一次出現

[...] <a rel=\"nofollow\" class=\"username offline popupctrl\" href=\"http://....html\" title=\"T3XTT0F1ND is offline\" id=\"...\">\">\">\">"[...]

如果我的模式設置爲

"<a rel=\"nofollow\" (.+) id=\"(.+)(?=\")" 

我得到T3XTT0F1ND 「>」>「>而不是隻是T3XTT0F1ND在組[2]。值 如何設置RegEx不僅可以找到'a rel =「nofollow」...'的第一個可能的出現,而且'id =''也可以?

回答

1

你不應該作一次()爲標題,像

<a rel=\"nofollow\" (.+) title=\"(.+)\" id=\"(.+)(?=\") 

這將導致組[2]返回T3XTT0F1ND離線

而且,你的意思是,你的ID等於T3XTT0F1ND和你組捕捉比這更?如果答案是肯定的,那麼你可以試試下面

<a rel=\"nofollow\" (.+) id=\"(.+)[^>]\" 
+0

「你不應該作一次()的稱號」 - 哎呀,這個固定。非常感謝。 ;) – kojoma 2011-04-02 22:13:25

+0

@kojoma沒問題,但一般的規則是,如果答案適合你,那麼你應該接受它。 – 2011-04-02 22:30:56

0

這適用於其中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(); 
} 
相關問題