我有一些来自数据库查询的“人类可读格式”的动态字符串。我需要直接从这些字符串中获取变量和当前值。我以前从未使用过正则表达式,所以我尝试为它构建一个表达式,但我被卡住了。
这就是我的字符串的样子:
"NOT (Name = John AND Date = 08.04.2022 AND (Status = Not active OR Status = Iddle) OR Surname != Doe)"
我尝试了几个表达式但没有成功,这是我得到一些结果的独特之处:
/\w*\ \=\ \w*/ig
它返回下一个正确的匹配:
Name = John
Status = Iddle
这些正确(但不完整)的匹配:
Date = 08
Status = Not
在变量Surname和值Doe之间有一个!=运算符。为此,我尝试在表达式中更改= for !=但它不起作用,我尝试将| (我理解的 OR 运算符),例如=|!=但它也不起作用......
对查询本身进行一些分析,它由以下组成:
此变量运算符值可以以空格或(字符开头,也可以以空格或)字符结尾。
关于如何为它构建表达式的任何想法?
这些值有很多可能性。以下不区分大小写的正则表达式应该是您的开始,它可以识别单引号字符串(如果使用反斜杠转义,则可以包含嵌入的单引号)或任何其他值,这些值是一系列特殊的非空白字符来处理标识符和数字。它还处理布尔值前面带有 NOT(不区分大小写)的值的情况:
\b(\w+)\b\s*(=|!=|<|<=|>|>=)\s*('(?:\\'|[^'])*'|(?:NOT\s+)?[\w.+-]+)
\b(\w+)\b
- 捕获组 1:匹配单词边界上的单词字符序列(变量名称)。s*(=|!=|<|<=|>|>=)\s*
- 捕获组 2:可能的运算符可能通过空格与变量名称和值分开。(
- 捕获组 3 的开始(值)。(?:\\'|[^'])*'
- 第一种选择:可能转义的单引号字符串。|
或者。(?:NOT\s+)?[\w.+-]+
- 第二种选择:特殊的非空白字符序列(单词字符、'+'、'-'、'.')可选地前面有 NOT,后跟空格。)
- 捕获组 3 结束。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句