正则表达式从HTML中提取链接

时间:2010-08-10 19:36:32

标签: regex

  

可能重复:
  Extract text and links from HTML using Regular Expressions

给定包含HTML的字符串,例如:

       <td scope="row">1</td> 
        <td scope="row"></td> 
        <td scope="row"><a href="/Archives/directory.htm">directoryfile.htm</a></td> 
        <td scope="row">directoryfile</td> 
        <td scope="row">104569</td> 
     </tr> 
     <tr class="blueRow"> 
        <td scope="row">2</td> 
        <td scope="row"></td> 
        <td scope="row"><a href="/Archives/historicaldata.htm</a></td> 
        <td scope="row">historicaldata</td> 
        <td scope="row">40361</td> 
     </tr> 
     <tr> 
        <td scope="row">&nbsp;</td> 
        <td scope="row"><span class="blue">Complete submission text file</span></td> 
        <td scope="row"><a href="/Archives/businessagenda.txt</a></td> 
        <td scope="row">businessagenda;</td> 
        <td scope="row">146701</td> 

我想使用正则表达式获取历史数据的链接。但是,似乎我的程序没有找到链接,我没有看到问题,因为正则表达式适用于测试人员。你们能看出问题是什么吗?

我知道正则表达式不适合与HTML一起使用,但我只想尝试一下。谢谢大家!

  

模式数据= Pattern.compile(“Archives。* \ s。* historicaldata”);
  Matcher test1 = data.matcher(inputHTML);

  while(test1.find()){
  System.out.println(“测试:现在匹配”); //不打印
  }

2 个答案:

答案 0 :(得分:0)

如果您只想匹配'Archives \ historicaldata',那么您的正则表达式字符串应该是 "Archives\/historicaldata"实际上您可以使用"Archives/historicaldata"

答案 1 :(得分:0)

以您的模式"Archives.*\s.*historicaldata"

Pattern data = Pattern.compile("Archives.*\s.*historicaldata");

\s表示空格[1],因为"/Archives/directory.htm"中没有空格,所以它不匹配。试试吧

Pattern data = Pattern.compile("Archives.*historicaldata");

[1]“\ s”也不正确 - 要在模式中获取,你必须转义反斜杠,使其成为“Archives。* \ s。* historicaldata”