【发布时间】:2017-08-28 09:29:51
【问题描述】:
我有一个英文单词数据库,我想使用正则表达式在这个数据库中搜索 我使用了这个查询:
SELECT * FROM `english` WHERE CHAR_LENGTH(words)=4 AND `words` REGEXP '^[oofd]+$'
它正在工作并且它选择像food,foo,of,do这样的词
但它也在选择像fooo 这样的词,带有 3 个 o,但在我的正则表达式中只有 2 个 o
什么是正确的正则表达式来选择没有重复字符的单词
如果有两个字符 例如 oo 它将只选择带有两个 o 或 1 或 零 的单词,不是三个或更多
我在互联网上查看了这个:
^(?:([oofd])(?!.*\1))
但它给了我一个错误:
#1139 - 从正则表达式中得到错误“重复运算符操作数无效”
【问题讨论】:
-
MySQL 正则表达式不支持非捕获组,也不支持前瞻,也不支持反向引用。无论如何,对于这个任务来说,这是一个错误的正则表达式。并且正则表达式在这里不是正确的工具。
-
@WiktorStribiżew 那么这样做的替代方法是什么?
-
你能给我们一个合适的例子来说明什么应该匹配和什么不应该匹配吗?
-
[...]是一个范围。它匹配它包含的字符之一。将重复字符放在范围定义内没有任何效果。[oofd]与[ofd]相同。顺序也无所谓。与[dfo]、[dof]等相同。 -
@axiac 我知道它是一样的,但是如何搜索只有 1 o 或更少的单词有没有办法限制字符?