我正在拼命尝试将具有以下格式的过滤字符串标记:
price:gte:5.99,price:lte:10.00,model:in:[test1,test2]
缺陷是逗号不仅用于分隔过滤器选项,还用作选项列表的分隔符:[test1,test2]
应用标准正则表达式标记化表达式[^,]+
可以得到:
price:gte:5.99
price:lte:10.00
model:in:[test1
test2]
但是,显然,我想:
price:gte:5.99
price:lte:10.00
model:in:[test1,test2]
我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用此替换使用此正则表达式:
[^][,]*(?:\[[^][]*\])+|[^,]+
<强>详细信息:强>
[^][,]+
:匹配1 +个不是,
和[
以及]
(?:\[[^][]*\])+
:在[
或]
之间匹配文字。匹配此组中的1个或更多|
:或[^,]+
:匹配1个不是逗号的字符答案 1 :(得分:1)
这可能是一个选项:
(?:[^][,\n]+\[[^]]+\]|[^,\n]+)
<强>解释强>
(?: # Non capturing group [^][,\n]+\[[^]]+\] # Match not a comma newline ] or [, then match between [] | # Or [^,\n]+ # Match not a comma or a newline ) # Close non capturing group
修改强>
正如@anubhava所建议的那样,将][
添加到字符类中,以便它变为[^][,\n]
以防止不必要的回溯。