繁体   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