簡體   English   中英

Java 包含括號的模式匹配組值

[英]Java Pattern matching group value containing parantheses

我正在嘗試使用正則表達式將字符串表達式分為三個部分。 它適用於大多數情況,但在一種情況下會卡住。

正則表達式

([\\w.]+?)(:|<|>|<=|>=|%|-|\\(\\))([\\w\\s,.:-]+?)\\|

代碼:

private SearchCriteria validateFilterPattern(String filter) {
        final Pattern pattern = Pattern.compile("([\\w.]+?)(:|<|>|<=|>=|%|-|\\(\\))([\\w\\s,.:-]+?)\\|");
        Matcher m = pattern.matcher(filter + "|");
        if (m.find()) {
            return SearchCriteria.builder().key(m.group(1)).operator(m.group(2)).value(m.group(3)).build();
        } else {
            throw new RuntimeException(ErrorMessage.FILTER_FORMAT_INVALID, filter);
        }
    }

輸入具有模式鍵:值。 上面的代碼使用正則表達式並將輸入表達式分組為三個部分:鍵、運算符和值。 運算符可以是:, >, <, >=, <=, *, ~, (), % 鍵可以是任何單詞,值可以包含單詞、字母、點、冒號、一些特殊字符和括號。

我能夠匹配以下並將其分為三個部分。

regulatory:Section 740.17 Mass Market
regulatory:Section 740.17

上述兩個輸入分為如下組

key {regulatory} , operator {:} , value {Section 740.17 Mass Market}
key {regulatory} , operator {:} , value {Section 740.17}

但無法將其分組為值包含括號的輸入。

regulatory:Section 740.17(b)(1) Mass Market
regulatory()Section 740.17(b)(1) Mass Market

以上內容應分為以下組

key {regulatory} , operator {:} , value {Section 740.17(b)(1) Mass Market}
key {regulatory} , operator {()} , value {Section 740.17(b)(1) Mass Market}

能夠通過使用下面的正則表達式來解決它

"([\\w.]+?)(:|<|>|<=|>=|%|-|\\(\\))([\\w\\s,.:\\(\\)-]+?)\\|"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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