gpt4 book ai didi

c# - 使用正则表达式提取所有内容,直到特定符号重复出现

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:06 25 4
gpt4 key购买 nike

我有以下声明:

column1==1 && 'column2'=='value' || year == 2006 || ('column2'=='value1' && 'column2'!='value2')  

像下面的 JSON 一样传递给我:

{
"type": "ExpressionStatement",
"expression": {
"type": "LogicalExpression",
"operator": "||",
"left": {
"type": "LogicalExpression",
"operator": "||",
"left": {
"type": "LogicalExpression",
"operator": "&&",
"left": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Identifier",
"name": "column1"
},
"right": {
"type": "Literal",
"value": 1,
"raw": "1"
}
},
"right": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Literal",
"value": "column2",
"raw": "'column2'"
},
"right": {
"type": "Literal",
"value": "value",
"raw": "'value'"
}
}
},
"right": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Identifier",
"name": "year"
},
"right": {
"type": "Literal",
"value": 2006,
"raw": "2006"
}
}
},
"right": {
"type": "LogicalExpression",
"operator": "&&",
"left": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Literal",
"value": "column2",
"raw": "'column2'"
},
"right": {
"type": "Literal",
"value": "value1",
"raw": "'value1'"
}
},
"right": {
"type": "BinaryExpression",
"operator": "!=",
"left": {
"type": "Literal",
"value": "column2",
"raw": "'column2'"
},
"right": {
"type": "Literal",
"value": "value2",
"raw": "'value2'"
}
}
}
}
}

我想从此 JSON 字符串中提取二进制表达式操作数。例如,对于 column1==1,我只需要 JSON 字符串的这一部分:

"left": {
"type": "Identifier",
"name": "column1"
},
"right": {
"type": "Literal",
"value": 1,
"raw": "1"
}

有了那个字符串,我就可以得到列名和比较值。由于 JSON 格式字符串是一致的,我可以使用 zero-width positive lookbehind assertion并检查 "type": "BinaryExpression", 值。然后我需要将所有数据获取到第二个 }

有没有办法用正则表达式来获取第二次出现的 的所有内容?

注意:

  1. 我知道使用一些 JSONstring 解析器会更好,但我不允许(我在 SQL Server 环境中工作)。<
  2. 我知道在 SQL Server 2016 中有原生 JSON 支持,但一些数据库是早期版本。
  3. 我需要纯正则表达式解决方案,因为在 T-SQL 上下文中我无法使用 .net,如 this one for example .

最佳答案

\"type\": \"BinaryExpression\",\s*(\".+\": +\"?.+\"?,?\s*)*(\".+\": \{\s*(\".+\": +\"?.+\"?,?\s*)+\},?\s*)+

似乎工作正常。说明:

\"type\":\"BinaryExpression\",\s* 查找文本 `"type": Binary Expression"后跟一些空格

(\".+\": +\"?.+\"?,?\s*)* 查找格式字符串 "something": "something" 结尾有一个可选的 , 。因为在二进制表达式之后可能有任意数量的,所以我们在末尾添加 *。此外,由于某些属性周围没有 "",因此第二个引号是可选的。再次跟随一些空格

(\".+\": {\s* string of format `"Something: {"whitespaces

(\".+\": +\"?.+\"?,?\s*)+ 格式内容 "something": "else" 其中第二个引号是可选的。由于这种类型的行很多,我们在后面加上 +

},?\s*)+ 这些行必须以 } 结尾,然后是可选的逗号。

在这里试试:https://regex101.com/r/IAgV0e/1

关于c# - 使用正则表达式提取所有内容,直到特定符号重复出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43865096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com