[英]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.