正则表达式 - 从HTML文件中查找各种字符串

时间:2012-02-28 15:33:14

标签: java html regex

我有一个名为basic.html的html文件,我的任务是创建一个使用正则表达式输出各种字符串的小型Java程序。我的程序应该显示以下每个字符串的所有出现的行号:

  • div tag
  • div class =“menuItem”tag
  • span tag
  • class =“emph”
  • 任何以<开头的字符串并以>结尾,即所有标签。
  • 正文标记的内容。
  • 所有div的内容
  • 制作菜单的所有div

我还必须使用start和end方法来显示索引值。

我已按如下方式启动了我的代码:

import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexHTML {
   public static void main(String[] args) throws IOException {

      // Input for matching the regexe pattern
       String file_name = "basic.html";

           ReadFile file = new ReadFile(file_name);
           String[] aryLines = file.OpenFile();  
           String asString = Arrays.toString(aryLines);

            // Regexe to be matched
               String regexe = "<div>";

           int i;
           for ( i=0; i < aryLines.length; i++ ) {
           System.out.println( aryLines[ i ] ) ;
           }



      // Step 1: Allocate a Pattern object to compile a regexe
      Pattern pattern = Pattern.compile(regexe);
      //Pattern pattern = Pattern.compile(regexe, Pattern.CASE_INSENSITIVE);  // case-    insensitive matching

      // Step 2: Allocate a Matcher object from the compiled regexe pattern,
      //         and provide the input to the Matcher
      Matcher matcher = pattern.matcher(asString);

      // Step 3: Perform the matching and process the matching result
      int count = 0;
      // Use method find()
      while (matcher.find()) {     // find the next match
         System.out.println("find() found the pattern \"" + matcher.group()
               + "\" starting at index " + matcher.start()
               + " and ending at index " + matcher.end());
          count++;

      }
      System.out.println("\nFound the pattern "+count+ " times.\n");

      // Use method matches()
      if (matcher.matches()) {
         System.out.println("matches() found the pattern \"" + matcher.group()
               + "\" starting at index " + matcher.start()
               + " and ending at index " + matcher.end());
      } else {
         System.out.println("matches() found nothing");
      }

      // Use method lookingAt()
      if (matcher.lookingAt()) {
         System.out.println("lookingAt() found the pattern \"" + matcher.group()
               + "\" starting at index " + matcher.start()
               + " and ending at index " + matcher.end());
      } else {
         System.out.println("lookingAt() found nothing");
      }

   }

}

我最大的问题是我将如何能够显示所有这些事件,到目前为止我的代码只给出了div标签的索引值,但我想在输出中显示上面列出的所有事件。 我的第二个问题当然是如何显示每个字符串出现的行,但我还没有真正研究过这个问题,因为我正在思考第一个问题。但是,如果你能给我一个关于在哪一个开始的提示,我会很感激。

2 个答案:

答案 0 :(得分:2)

一种方法是将每个正则表达式应用于String[] aryLines个别行。行号是索引。

如果您要查找的短语跨越多行,您打算怎么办?这在HTML中是有效的...另外,让我成为第一个说正则表达式在一般情况下无法解决此问题的人。

答案 1 :(得分:1)

您真的不应该使用正则表达式来解析HTML,尝试使用现有的库,例如JSoup。我相信你宁愿不花时间重新发明HTML解析!