【发布时间】:2019-02-26 07:13:26
【问题描述】:
我有以下 .NET 正则表达式无法正常工作
- “val”组中有一个空格
- 'val' 组没有被单引号括起来
我正在使用正则表达式解决方案(不是解析器)来修改此模式以匹配上述两个问题。有更多正则表达式经验的人可以改进它吗?
(?\w+|`.+`|\[.+\])\s*(?[=]|LIKE)\s*(?'?) (?
\B)?(?:\s*(?
REGEX STORM .Net Tester
该模式使用字符序列减法 - regex101 是否支持这一点?
捕获组: 如果字段包含空格或非字母数字,则字段可以选择用大括号 (`) 或方括号 ([]) 括起来。
值可以用单引号 (') 括起来。使用两个单引号转义单引号。使用方括号“[*]”和“[%]”转义通配符“*”和“%”。用方括号“[[]”和“[]]”转义方括号'['和']'
布尔运算符可以是 OR 或 AND
比较运算符可以是 =、 或 LIKE
模式是Microsoft Expression Filter 的简化,只处理上述子集。
应该工作的示例如下。
每个示例都在单独的行上。正则表达式可以在每一行上匹配多次。
例如:
"a LIKE 'b[*]' OR [b] LIKE 'c''s' AND d = f OR e = 'd'" 将匹配:
- “一个喜欢'b [*]'或”。此匹配的组:field="a"、operator=LIKE、val="b[*]"、boolean=OR。
- “[b] LIKE 'c''s' AND”。组:field="b"、operator=LIKE、val="c's"、boolean=AND。
- “d = f 或”。组:field="d"、operator="="、val="f"、boolean=OR。
- “e = 'd'”。组:field="e"、operator="="、val="d"、boolean=。但正则表达式与此文本不匹配。
a LIKE 'b[*]' OR [b] LIKE 'c''s' AND d = f OR e = 'd'
[a b] = 'd'
`e f g` > 'f'
g h = ' '
我 = '3'
[全名] = ''
名字喜欢“你好”
[名字] = 'g'
`年龄` > 6
`全名` = ''
【问题讨论】:
-
请提供正则表达式必须适用的输入以及应该是什么输出
-
@HadiRj - 我认为整行应该匹配。尽管有一些不应该匹配的例子会很有帮助。 fwiw - 看起来 OP 想要使用正则表达式解析类似 sql 的语言。这永远不会是 100% 万无一失的。正则表达式不适合。
-
Regexbuddy 无法制作正则表达式的正面或反面。你能提供一个regex101 的样本吗?
-
你的正则表达式也有
Unrecognized grouping construct错误。 -
@HadiRj,当我粘贴它时,该模式很好,但被 stackoverflow 破坏为错误的 html 标签。现已修复。