【问题标题】:Using negative lookahead Regex in MySQL在 MySQL 中使用负前瞻正则表达式
【发布时间】:2020-06-30 08:47:09
【问题描述】:

我正在尝试编写一个正则表达式来选择其中只有两个点 (..) 的所有帖子,并丢弃所有包含三个或更多 (..) 的帖子。我想出了(?

但是当我做SELECT * FROM table where column regexp '(?<!\.)\.{2}(?!\.)' 时,我得到一个错误。我似乎 Mysql 不支持负前瞻。我该如何解决这个问题?

【问题讨论】:

  • 使用 2 个条件 = 第一个 like '%..%' 和第二个 not like '%...%'。当然,要正确引用。

标签: mysql regex regex-lookarounds


【解决方案1】:

您可以使用组,因为您只需要一个布尔结果并且匹配只搜索一次:

SELECT * FROM table where column regexp '([^.]|^)[.]{2}([^.]|$)'

详情

  • ([^.]|^) - 任何字符,但 . 或字符串开头
  • [.]{2} - 两个点
  • ([^.]|$) - 任何字符,但 . 或字符串结尾

请注意,即使有... 子字符串,也会返回包含此子字符串的任何记录,例如abc...bc..。为了避免这些,你可以使用

SELECT * FROM table where column     LIKE '%..%'
                      AND column NOT LIKE '%...%'

LIKE 需要完整的模式匹配,因此% 匹配开头的任何 0 个或多个字符,..... 匹配两个或三个点,然后 % 匹配其余的字符串。

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 2021-10-11
    • 2011-10-14
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多