使用未知标记名的html标记之间的提取?

时间:2016-01-12 15:59:48

标签: java regex

<b>Topic1</b><ul>asdasd</ul><br/><b>Topic2</b><ul>....

我想提取<b>Topic1</b>和下一个<b>开始标记之后的所有内容。在这种情况下,<ul>asdasd</ul><br/>

问题:它不一定必须是<b>标记,但可以是任何其他重复标记。

所以我的问题是:如何动态提取这些文字?唯一的静态思考是:

  • 要查找的信号关键字始终为“Topic1”。我想把周围的标签作为要查找的标签。
  • 标签总是重复。在这种情况下,它总是<b>,也可能是<i><strong><h1>等。

我知道如何编写java代码,但正则表达式会是什么样的?

String regex = ">Topic1<";
Matcher m = Pattern.compile(regex).matcher(text);
while (m.find()) {
    for (int i = 1; i <= m.groupCount(); i++) {
        System.out.println(m.group(i));
    }
}

2 个答案:

答案 0 :(得分:2)

以下内容应该有效

Topic1</(.+?)>(.*?)<\\1>

输入:<b>Topic1</b><ul>asdasd</ul><br/><b>Topic2</b><ul>

输出:<ul>asdasd</ul><br/>

代码:

    Pattern p = Pattern.compile("Topic1</(.+?)>(.*?)<\\1>");
    //  get a matcher object
    Matcher m = p.matcher("<b>Topic1</b><ul>asdasd</ul><br/><b>Topic2</b><ul>");
    while(m.find()) {
        System.out.println(m.group(2));  // <ul>asdasd</ul><br/>
    }

答案 1 :(得分:0)

试试这个

String pattern = "\\<.*?\\>Topic1\\<.*?\\>"; // this will see the tag no matter what tag it is
String text = "<b>Topic1</b><ul>asdasd</ul><br/><b>Topic2</b>"; // your string to be split
String[] attributes = text.split(pattern);
for(String atr : attributes) 
{
    System.out.println(atr);
}

将打印出来:

<ul>asdasd</ul><br/><b>Topic2</b>