正则表达式从html标签(嵌套)获取文本 - Java

时间:2016-01-02 23:26:57

标签: java regex

使用正则表达式,我希望能够在多个html标签之间获取文本。 这里的HTML仅用于表示输入,我不担心HTML标签,只想检索HTML标签中的内容(在正确的打开和关闭标签之间)。 例如,以下内容:

必填项:

<h1>Text 1</h1>
<h1><h2>Text 2</h2></h1>
<h1><h2>Text 3</h2>Xtra</h1>
<h1>Text 4<h1>extra</h1515></h1>
<h1><h1></h1></h1>

必需输出:

Text 1
Text 2
Text 3
None
None

获得的输出:

Text 1
Text 2
Text 3
Text 4<h1>extra</h1515>
<h1></h1>

正则表达式我试过了:

"<([\\S ]+)>([\\S ]+)</\\1>"

我没有得到预期的结果。

我的java代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution{
   public static void main(String[] args){

      Scanner in = new Scanner(System.in);
      int testCases = Integer.parseInt(in.nextLine());
      while(testCases>0){
         String line = in.nextLine();
         String tmp = line;
          Pattern r = Pattern.compile("<([\\S ]+)>([\\S ]+)</\\1>", Pattern.MULTILINE);
         Matcher m = r.matcher(line);
         while(m.find()){
             line = line.replaceAll(line, m.group(2));
             m = r.matcher(line);
         }
         if(line != tmp)
             System.out.println(line);
          else
              System.out.println("None");
         testCases--;
      }
   }
}

1 个答案:

答案 0 :(得分:2)

正如评论中所指出的,这种方式只不过是痛苦。对于您尝试做的事情,您可以通过jsoup

之类的东西走向DOM(文档对象模型)。