用于逗号分隔文本的 Mysql 正则表达式

Posted

技术标签:

【中文标题】用于逗号分隔文本的 Mysql 正则表达式【英文标题】:Mysql regex for comma delimeted text 【发布时间】:2014-06-23 14:07:41 【问题描述】:

我对存储在数据库中的逗号分隔文本有一点问题。我有一个像 "12,5,45" 这样的字符串,我想使用 mysql 的正则表达式函数匹配 5:

agents REGEXP 'some regex here'

我怎样才能做到这一点?

我以 \5+(,\s*5+)\ 或 (?:(5)*.)?5+\ 之类的正则表达式结尾,但它也匹配 "12,45" 或 "15, 1"。我需要正则表达式,它将完全匹配字符串中的 5,例如:

“5”、“1,3,5”、“64,5”

不是

“45,12”、“1,50”。

5 是一个元素的 ID,所以我也不能匹配 15 或 45。

我希望一切都清楚。

提前致谢。

【问题讨论】:

将逗号分隔的值存储在一列中几乎不是一个好主意。如果可以的话,您应该考虑规范化您的表格。 【参考方案1】:

由于 MySQL 使用的 POSIX 引擎既不支持 word boundary anchors 也不支持 lookaround assertions),因此您必须使用像这样的正则表达式来作弊

(^|,)5(,|$)

确保匹配 5 仅当被逗号或字符串的开头/结尾包围时。

【讨论】:

太好了,谢谢。它就像一个魅力。我会尽快接受答复。 简洁的参考答案,+1 :)

以上是关于用于逗号分隔文本的 Mysql 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用于验证数字逗号分隔值的 Java 正则表达式

正则表达式匹配逗号分隔的数字与可选的小数部分

用逗号作为小数分隔符的数字的 Google 表单正则表达式

ruby Amazon ASIN正则表达式和Ruby用于从逗号分隔或换行符分隔的textarea中提取asins

我可以使用啥正则表达式在逗号分隔列表中查找 Nᵗʰ 条目?

简单的js正则表达式问题