【问题标题】:Search using REGEXP with no repeating characters in mysql使用 mysql 中没有重复字符的 REGEXP 进行搜索
【发布时间】: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 它将只选择带有两个 o1 的单词,不是三个或更多

我在互联网上查看了这个:

^(?:([oofd])(?!.*\1))

但它给了我一个错误:

#1139 - 从正则表达式中得到错误“重复运算符操作数无效”

【问题讨论】:

  • MySQL 正则表达式不支持非捕获组,也不支持前瞻,也不支持反向引用。无论如何,对于这个任务来说,这是一个错误的正则表达式。并且正则表达式在这里不是正确的工具。
  • @WiktorStribiżew 那么这样做的替代方法是什么?
  • 你能给我们一个合适的例子来说明什么应该匹配和什么不应该匹配吗?
  • [...] 是一个范围。它匹配它包含的字符之一。将重复字符放在范围定义内没有任何效果。 [oofd][ofd] 相同。顺序也无所谓。与[dfo][dof]等相同。
  • @axiac 我知道它是一样的,但是如何搜索只有 1 o 或更少的单词有没有办法限制字符?

标签: mysql regex database


【解决方案1】:

依次检查两个元音存在和三个或更多元音不存在

SELECT *
FROM english
WHERE
    words REGEXP '^.*[aeiou]{2}.*$' AND
    words NOT REGEXP '^.*[aeiou]{3}.*$'

如果您只想查找某些重复的元音,您应该能够相当轻松地调整此答案。

【讨论】:

  • 见鬼,我完全得到了一些线头!谢谢! @Tim-Biegeleisen
猜你喜欢
  • 2011-08-02
  • 2011-11-25
  • 1970-01-01
  • 2012-07-15
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-15
  • 2021-09-13
相关资源
最近更新 更多