我试图想出一个能够逐位匹配PQL查询组件的正则表达式。我想到的一些例子:
a==
[('a==')]
a==22
[('a==22')]
a=="b"
[('a=="b"')]
a=="b" and/or/not <- any of these
[('a=="b"', '{logical operator}')]
a=="b" or c.
[('a=="b"', 'or'), ('c.')]
a=="b" or c.d
[('a=="b"', 'or'), ('c.d')]
a=='b' and c=="
[("a=='b'", 'and'), ('c=="')]
基本上每当输入PQL语句的新部分时,我们都会创建一个新的匹配,它适用于字符串或数字的查询。
我当前的表达式如下:
([a-zA-Z.\-_]+[=!<>]{0,2}([\"\']?[a-zA-Z\-!._ "\']*?[\"\']|[0-9]*))[ ]?(and|or|not)?[ ]?
它做得很好,但在这样的事情上失败了:
a==22 and b=='c
它认为c
属于新的匹配,产生以下内容:
[('a==22', '22', 'and'), ('b==', "'"), ('c')]
与
相反[('a==22', '22', 'and'), ('b==', "'c")]