[英]Java regex matches nothing
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));
}
如果將Item替換為Type
或InvDate
或No
,則可以獲得內容。
尋找答案。 謝謝
您必須對多行機械使用選項Pattern.DOTALL
:
Pattern pattern = Pattern.compile("(<Item>)(.*)(</Item>)",Pattern.DOTALL);
但是最好使用HTML解析器。
您必須對多行機械使用選項Pattern.DOTALL :
Pattern pattern = Pattern.compile("(<Item>)(.*?)(</Item>)",Pattern.DOTALL);
量詞:*? 在0到無限制的時間之間,盡可能少的時間,根據需要擴展[懶惰]
您還需要使用DOTALL
標志來使DOT
匹配包括換行符在內的任何字符:
Pattern pattern = Pattern.compile("(?s)(<Item>)(.*)(</Item>)");
要不然:
Pattern pattern = Pattern.compile("(<Item>)(.*)(</Item>)", Pattern.DOTALL);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.