2009-10-20 99 views
0
<div> 

      <a href="http://website/forum/f80/ThreadLink-new/" id="thread_gotonew_565407"><img class="inlineimg" src="http://website/forum/images/buttons/firstnew.gif" alt="Go to first new post" border="0" /></a> 



      [MULTI] 
      <a href="http://website/forum/f80/ThreadLink/" id="thread_title_565407" style="font-weight:bold">THREAD TITLE</a> 

     </div> 

我知道一個事實,我感興趣的鏈接是要去大膽:如何將這些字符串與正則表達式匹配?

font-weight:bold 

但是鏈接本身到來之前。我該如何將能夠同時匹配鏈接地址:

http://website/forum/f80/ThreadLink/ 

和主題標題:

THREAD TITLE 

編輯:Internet Explorer的HTML代碼非常不同:

<A style="FONT-WEIGHT: bold" id=thread_title_565714 
     href="http://LinkAddress-565714/">ThreadTitle</A> </DIV> 

回答

2

試試這個:

ThreadTitle

<A style="FONT-WEIGHT: bold" id=(?<id>.*?)[\s\S]*? href="(?<url>.*?)">(?<title>.*?)</A> 

所以,你可以使用:

Regex link = new Regex(@"<A style=""FONT-WEIGHT: bold"" id=(?<id>.*?)[\s\S]*? href=""(?<url>.*?)"">(?<title>.*?)</A>"); 
foreach (Match match in link.Matches(input)) 
{ 
    Console.WriteLine(
     "Id={0}, Url={1}, Title={2}", 
     match.Groups["id"].Value, 
     match.Groups["url"].Value, 
     match.Groups["title"].Value); 
} 
+0

感謝,也如果鏈接是:linkaddress-ID,將有可能把它適合的正則表達式匹配,所以我沒有打破其他團體的額外gro??所以fulllink,標題,linkid(數字後 - :linkaddress-1234) – 2009-10-20 01:33:29

+1

請參閱編輯的答案;而已? – 2009-10-20 01:38:44

+0

謝謝魯本,現在就來看看吧。 – 2009-10-20 01:40:23

4
.*<a href="(.*?)".*style="font-weight:bold">(.*?)</a> 

比賽第1組:URL 比賽第2組:主題標題

這將匹配任何大膽的鏈接。如果你想匹配一個特定的,用這些值替換(。*?)。

+0

謝謝,如果鏈接是:linkaddress-id,是否有可能適合正則表達式匹配,所以我有一個額外的groip而不打破其他組?所以fulllink,title,linkid(數字後 - :linkaddress-1234) – 2009-10-20 01:23:53

+0

我不認爲我們需要最初的。*或任一問號符號 – Joel 2009-10-20 01:29:20

+0

魯本斯指出,問號符號是必要的。請忽略我的評論。 – Joel 2009-10-20 01:33:08

1
<a href="([^"]*)"[^>]*style="[^"]*font-weight:bold[^"]*"[^>]*>([^<]*)</a> 

大致相同的以前的答案,但我已經更換了他們的.*[^"]*等。在第一場比賽,這阻止它匹配下一個雙引號符號以外的任何東西。如果不這樣做,如果你能匹配的情況太多了,其中輸入是這樣的:

<a href="#dont_match_me">Don't match me</a><br/> 
<a href="http://website/forum/f80/ThreadLink/ style="font-weight:bold">THREAD TITLE</a> 
+0

「(。*?)」是一個非貪婪的匹配模式;它的意思是:「在下一個報價之前找到一個報價並抓取最小的文本片段」;因此,在這種情況下,它與您的[^「] * – 2009-10-20 01:29:37

+0

相同。只是爲了澄清,[^」]是指除雙引號以外的任何字符。意味着任何角色。這意味着該點可以匹配最後一個雙引號 - 最終可能會匹配太多 – Joel 2009-10-20 01:30:58

+0

哦,好的。謝謝魯本斯。 – Joel 2009-10-20 01:32:20