有字符串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();
答案 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以获取更详细的信息。这种情况经常出现,并且有很多关于为什么不这样做的信息以及它为什么不起作用。