【发布时间】:2019-06-03 08:01:35
【问题描述】:
我查看了关于排除正则表达式的其他问题,但我无法找到我的问题的答案。
我有 SQL 语句
select --(* vendor(microsoft), product(odbc) guid'12345678-1234-1234-1234-123456789012' *)-- from TAB
使用正则表达式,我想找到该字符串中的每个字符,除了
--(* vendor(microsoft), product(odbc)
和
*)--
供应商和产品名称(microsoft 和 odbc)也可以是任何名称,我仍然想排除它。
我不在乎有什么样的字符,或者 SQL 语句在语法上是否正确。字符串可能看起来像这样,我仍然想找到所有内容,包括空格,不包括我上面提到的内容:
{Jane Doe?= --(* vendor(micro1macro2?), product(cdb!o) 123$% --(**) *)-- = ?
到目前为止,我有这样的表达方式:
(--\(\* vendor\(.*\), product\(.*?\))|(\*\)--)
这似乎有助于找到我想要排除的内容https://regex101.com/r/rMbYHz/204。但是,我无法否定它。
【问题讨论】:
-
不要否定,直接用空字符串替换即可。
-
我不想改变字符串,我只想匹配它。
-
您不能有效地匹配不等于某些多字符字符串的字符串部分。可以使用 PCRE,但这不是一个好主意,因为正则表达式可能会冻结应用程序。
-
使用 PCRE,您可以使用例如
(*SKIP)(*F)并匹配剩余的单个字符或使用否定。对剩余部分的每个字符进行前瞻like your updated demo(正如 Wiktor 提到的那样,两者都没有效率)。
标签: sql regex regex-negation