簡體   English   中英

Java正則表達式不匹配

[英]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替換為TypeInvDateNo ,則可以獲得內容。

尋找答案。 謝謝

您必須對多行機械使用選項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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM