0

我目前有一个程序可以找到字符串中的所有正则表达式,但是对于不同的部分,我想要与正则表达式匹配的部分和不匹配的部分。

因此,如果我有,<h1> hello world </h1>我希望能够将其拆分为 [ <h1>, hello world, </h1>]。

有没有人对他们将如何去做有任何想法?

这是我的代码,它拆分字符串以查找正则表达式部分

ArrayList<String> foundTags = new ArrayList<String>();
Pattern p = Pattern.compile("<(.*?)>");
Matcher m = p.matcher(HTMLLine);
while(m.find()){
    foundTags.add(m.group(0));
}
4

2 回答 2

0

例如

String text = "testing<hi>bye</hi><b>bla bla!";
Pattern p = Pattern.compile("<(.*?)>");
Matcher m = p.matcher(text);
int last_match = 0;
List<String> splitted=new ArrayList<>();
while (m.find()) {
        splitted.add(text.substring(last_match,m.start()));
        splitted.add(m.group());
        last_match = m.end();
    }
    splitted.add(text.substring(last_match));
System.out.println(splitted.toString());

印刷[testing, <hi>, bye, </hi>, , <b>, bla bla!]

那是你要的吗?如果您不想要它们,您可以轻松地修复代码以省略空元素:

while (m.find()) {
    if(last_match != m.start())
        splitted.add(text.substring(last_match,m.start()));
    splitted.add(m.group());
    last_match = m.end();
}
if(last_match != text.length())
    splitted.add(text.substring(last_match));

请记住,正如评论中所指出的:使用正则表达式来解析任意 HTML/XML 通常是一个坏主意。

于 2013-03-26T02:26:54.517 回答
0

您可以使用正则表达式分组功能来检索匹配的不同部分。例如:

ArrayList<String> list = new ArrayList<String>();
Pattern p = Pattern.compile("(<.*?>)(.*)(<.*?>)");
Matcher m = p.matcher("<h1> Hello World </h1>");
while(m.find()){
    list.add(m.group(1));
    list.add(m.group(2));
    list.add(m.group(3));
}

会给你你想要的清单:["<h1>", " Hello World ", "</h1>"]。请注意,组号 0 是完全匹配的表达式。

于 2013-03-26T02:35:43.580 回答