正则表达式匹配字符串中的精确数字,无需前瞻或后视
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])
但是,我需要 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
.
双反斜杠可能有点矫枉过正,具体取决于客户端。
假设我正在使用换行符查找字符串中的特定数字: 1\n2\n4\n5\n7\n8\n9\n12\n13
前瞻和后视与以下内容完美配合:
(?<![0-9])12(?![0-9])
但是,我需要 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
.
双反斜杠可能有点矫枉过正,具体取决于客户端。