You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL不支持负向前瞻正则:如何筛选仅含两个点的帖子

解决MySQL不支持负向前瞻的正则筛选问题

嘿,这个坑我之前踩过!MySQL的正则引擎确实不支持PCRE里的负向前瞻((?!...))和负向后顾((?<!...))语法,所以得换个思路来实现你“筛选仅包含两个连续点、排除三个及以上连续点”的需求。

可行的解决方案

我们可以把需求拆成两个互补的条件,用逻辑与(AND)组合起来:

  1. 先排除所有包含三个及以上连续点的记录:用NOT REGEXP '\.{3,}'过滤掉有...、....这类内容的行
  2. 再筛选出包含至少一组两个连续点的记录:用REGEXP '\.{2}'确保行里存在..

最终的SQL语句长这样:

SELECT * FROM table WHERE column REGEXP '\.{2}' AND column NOT REGEXP '\.{3,}';

为什么这个方法管用?

  • 第一步排除了所有有三个及以上连续点的内容,剩下的行里最多只有单个点或者两个连续点的组合
  • 第二步再从中挑出确实存在两个连续点的行,就完美匹配了你要的“仅包含两个连续点、没有更多连续点”的需求

举个例子,以下内容会被正确筛选:

  • foo..bar
  • ..start
  • end..

而这些内容会被排除:

  • foo...bar(三个连续点)
  • foo.bar.baz(只有单个点)
  • foo....bar(四个连续点)

额外说明

如果你的需求是“整个字符串恰好只有两个点(不管是否连续)”,那可以调整条件为:

SELECT * FROM table WHERE LENGTH(column) - LENGTH(REPLACE(column, '.', '')) = 2;

不过从你最初写的正则来看,应该是要匹配连续的两个点,所以第一种方案更贴合你的需求。

内容的提问来源于stack exchange,提问作者enok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:37:42