Java preg_match数组

时间:2011-02-22 21:51:06

标签: java html regex

有字符串strng = "<title>text1</title><title>text2</title>"; 如何获得像

这样的数组
arr[0] = "text1";
arr[1] = "text2";

我尝试使用它,但结果有,而不是数组text1</title><title>text2

Pattern pattern = Pattern.compile("<title>(.*)</title>");
Matcher matcher = pattern.matcher(strng);
matcher.matches();

3 个答案:

答案 0 :(得分:8)

虽然我同意使用XML / HTML解析器is a better alternative in general,但使用正则表达式解决方案很简单:

List<String> titles = new ArrayList<String>();
Matcher matcher = Pattern.compile("<title>(.*?)</title>").matcher(strng);
while(matcher.find()){
    titles.add(matcher.group(1));
}

请注意非贪婪的运算符.*?并使用matcher.find()代替matcher.matches()

<强>参考:

答案 1 :(得分:0)

看起来你想要一个为这类工作而构建的HTML / XML解析器。

虽然如果你有一组受控信息(比如上面的一个行)你可能使用matcher find()使用正则表达式进行迭代,例如

(?<=\\>)\\w+(?=\\<)

同样,任何比你的单一班轮更复杂的东西应该由regex cannot parse HTML/XML以后的适当的解析器解析。

答案 2 :(得分:0)

由于没有容器元素,因此看起来像无效的XML,如果您创建有效的XML,则可以使用XML解析器对其进行解析。对于上述小片段,我建议JDOM

如果是XML或HTML,请不要使用try并使用正则表达式,因为XML和HTML不是常规语言,并且您无法使用正则表达式成功解析,因为它们无法维持足够的状态。只需搜索stackoverflow以获取更详细的信息。这种情况经常出现,并且有很多关于为什么不这样做的信息以及它为什么不起作用。