java正则表达式不适用于以下模式
我试图在查询参数中找出一个与以下条件匹配的正则表达式。我需要找出文本在查询参数中是否传递了and
或or
运算符。我可以有一个类似http:$URL/$RESOURCE?$filter="firstName eq 'John' and tenantId eq '32323232'"&$order="asc.
的URI
正文1:firstName eq 'John' and tenantId eq '32323232'
正文2:firstName like 'J%' or companyName eq 'IBM'
正文3:companyName like 'John and Sons'
虽然下面的正则表达式模式适用于文本1和文本2,但是我需要一种过滤文本3的方法,因为and here包含在一个值中。值应始终用引号括起来,因此引号中的任何and
或or
值都应由regex引用。如有助于过滤文本3等情况,将不胜感激。谢谢
public static boolean hasANDorORoperator(String filter) {
return filter.matches("^(.*?)\\s+(?i)(or|and)\\s+(.*?)$");
}
# 1 楼答案
如果后面有偶数个引号,则仅匹配
and
或or
。因此,如果在字符串中,则不满足该条件,匹配失败See it on regex101
说明:
# 2 楼答案
如果我是你,我会先拉出所有的字符串,如文本3的示例中所示。我先过滤掉《约翰和儿子》
然后,只剩下可以与(.*)\s+(和|或)\s+(.*)正则表达式匹配的原始命令
这样就不必处理由此产生的复杂正则表达式
# 3 楼答案
我们应该做到这一点。在匹配结束/或之前,我正在捕获妄想症中的任何东西,因此它不可能再匹配结束/或了。因为大多数regexp引擎都会回溯以匹配稍后捕获的组,所以我在末尾包含了
no '