我正在尝试使用正则表达式解析一个简单的过滤条件
过滤器应具有以下语法:
field=value
field:value
field!=value
field<>value
etc... (you get the idea)
我想出了以下(在scala中)
val FilterEntry = """^(\w+)(!?)(=|:|<=|>=|<>|<|>)(.*)$""".r
val FilterEntry(v1, v2, v3, v4) = "field!<>value"
v1: String = field
v2: String = !
v3: String = <>
v4: String = value
所以这是一个好的开始
现在我希望正则表达式在没有传递值时捕获(引发错误)
我试过这个(我把最后一组设为非可选)
val FilterEntry = """^(\w+)(!?)(=|:|<=|>=|<>|<|>)(.+)$""".r
val FilterEntry(v1, v2, v3, v4) = "field!<>"
v1: String = field
v2: String = !
v3: String = <
v4: String = >
所以问题在于它将运算符识别为“<”,将值识别为“>”,而不是正确地将运算符识别为“<>”并将值识别为“”(如果我用最火的 reg exp 对其进行测试,它正确将运算符识别为 <> 并将值识别为 "")
我想我应该告诉正则表达式贪婪地匹配运算符,但我认为默认情况下是这样的......
- 编辑
我刚刚在网上找到了这个 scala 控制台,为你测试正则表达式 http://www.simplyscala.com/
--