<b>Topic1</b><ul>asdasd</ul><br/><b>Topic2</b><ul>....
我想提取<b>Topic1</b>
和下一个<b>
开始标记之后的所有内容。在这种情况下,<ul>asdasd</ul><br/>
。
问题:它不一定必须是<b>
标记,但可以是任何其他重复标记。
所以我的问题是:如何动态提取这些文字?唯一的静态思考是:
<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));
}
}
答案 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>