【问题标题】:Regex matching everything except specific words正则表达式匹配除特定单词之外的所有内容
【发布时间】: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


【解决方案1】:

replace() 做你想做的事吗?

select replace(replace(t.col, '--(* vendor(microsoft), product(odbc)', ''
                      ), '*)--', ''
              )

【讨论】:

    猜你喜欢
    • 2019-11-12
    • 2018-12-21
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多