2009-10-20 93 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