JAVA正則表達式捕獲組的使用

從學java開始就沒弄清楚過捕獲組的用法,一般沒有處理複雜字符串的時候也不會去用。之前一直理解錯了捕獲組的用法,一直以爲捕獲組是可以循環捕獲的
我以爲的寫法是這樣的 (組1(組2))* 即組1循環匹配字符串,其實壓根不是這樣。
正確的做法是 捕獲組表達式只要匹配最小的一個單元即可 然後通過 循環調用find去一步步推進匹配
這裏很詳細
這裏是我自己的編寫正則時候的工具網絡,不是很穩定,可以是git自己搭過個
貼一個將xml文本里面的字段存入map的正則表達式使用例子 這裏的xml並沒有多級結構,也沒有多餘的屬性

 Pattern p=Pattern.compile("<(?<node>[0-9A-Za-z_]{2,50}?)>(?<val>.*?)<[/](?:[0-9A-Z_a-z]{2,50})>");
        Matcher matcher = p.matcher(xml);
        while (matcher.find()) {
            String key = matcher.group("node");
            String val = matcher.group("val");
            result.put(key.trim(), val.trim());
        }

(?: 代表非捕獲組 即也是組 但find時候忽略
(? 即對 此捕獲組取名 爲 node
?) 即非貪心的 最小匹配 如果正則沒有詳細匹配往大了寫 如.* 那麼最好加上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章