String string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<Request>\n" +
" <Item>\n" +
" <Type>C0401</Type>\n" +
" <InvDate>20150301</InvDate>\n" +
" <No>PK1000000</No>\n" +
" </Item>\n" +
" <Item>\n" +
" <Type>C0401</Type>\n" +
" <InvDate>20150301</InvDate>\n" +
" <No>PK1000002</No>\n" +
" </Item>\n" +
"</Request>";
Pattern pattern = Pattern.compile("(<Item>)(.*)(</Item>)");
Matcher matcher = pattern.matcher(string);
List<String> listMatches = new ArrayList<String>();
while(matcher.find())
{
listMatches.add(matcher.group(2));
}
如果我将项目替换为Type
或InvDate
或No
,我可以获取内容。
寻找答案。感谢
答案 0 :(得分:0)
您需要使用DOTALL
标记使DOT
匹配任何字符,包括换行符:
Pattern pattern = Pattern.compile("(?s)(<Item>)(.*)(</Item>)");
否则:
Pattern pattern = Pattern.compile("(<Item>)(.*)(</Item>)", Pattern.DOTALL);
答案 1 :(得分:0)
您必须为多行匹配使用选项Pattern.DOTALL
:
Pattern pattern = Pattern.compile("(<Item>)(.*)(</Item>)",Pattern.DOTALL);
但最好使用HTML解析器。
答案 2 :(得分:0)
您必须为多行匹配使用 Pattern.DOTALL 选项:
Pattern pattern = Pattern.compile("(<Item>)(.*?)(</Item>)",Pattern.DOTALL);
量词:*?在零和无限次之间,尽可能少的时间,根据需要扩展[懒惰]