正则表达式匹配字符串中的精确数字,无需前瞻或后视

Regex to match exact number in string without lookahead or lookbehind

假设我正在使用换行符查找字符串中的特定数字: 1\n2\n4\n5\n7\n8\n9\n12\n13

前瞻和后视与以下内容完美配合:

(?<![0-9])12(?![0-9])

Regex 101 demo

但是,我需要 MySQL REGEXP 的解决方法,因为它不支持带环视的模式。

如果 (?<![0-9])12(?![0-9]) 在在线正则表达式引擎中为您工作,则以下正则表达式必须在基于 POSIX 的 REGEXP 模式中为您工作:

(^|[^0-9])12($|[^0-9])

或者,您可以使用单词边界:

[[:<:]]12[[:>:]]

参见regex demo

详情:

  • (^|[^0-9]) - 字符串开头或非数字字符
  • [[:<:]] - 前导词边界
  • 12 - 一个特定的数值,这里12
  • [[:>:]] - 尾随单词边界
  • ($|[^0-9]) - 字符串结尾或非数字。

对于MySQL 8.0,

"\b12\b"

"\s12\s"

前者检查“字边界”,可能更好。后者检查空格,例如 \n.

双反斜杠可能有点矫枉过正,具体取决于客户端。