【问题标题】:MySql Regexp to search from user inputMySql Regexp 从用户输入中搜索
【发布时间】:2011-06-22 20:17:15
【问题描述】:

这个要杀了我,我是一个正则表达式的菜鸟。 我正在尝试进行站点搜索并将输入的文本与标题列中的 数据库。 基本上我想用正则表达式完成的是 LIKE '%word1 word2 word3%' ,但有一些字符串变体。

例如:

SELECT * FROM table WHERE title REGEXP 'w[ao]rd'

工作得很好。它寻找单词和病房。但是当我想要多个单词时,它什么也不返回。

SELECT * FROM table WHERE title REGEXP 'w[ao]rd sec[or]nd th[io]rd'

我不想搜索单词或第二个或第三个,我想将它们全部放在标题中,就像大写的 LIKE 一样。

我在想也许可以分解用户输入的搜索字符串,然后在 foreach 中逐字执行正则表达式,但不知道如何将所有变体连接到一个查询中。

编辑: 我忘了提到我在 utf8_unicode_ci 整理表中搜索。 所以我真的在尝试进行 [cčć]orak 类型的搜索。

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:
       SELECT * FROM table WHERE title REGEXP 'w[ao]rd|sec[or]nd|th[io]rd'
    

    编辑:

    “好的,所以你希望它们都出现在标题中并按顺序排列?”

       SELECT * FROM table WHERE title REGEXP 'w[ao]rd.*sec[or]nd.*th[io]rd'
    

    这将查找这些词(和变体)并使它们按该顺序排列,例如

    word blahblah second more blah third
    

    【讨论】:

    • 谢谢,但这是在做 OR,我说我不需要那样做。
    • 好吧,还有其他方法可以做到这一点,比如做“where title regexp '..' OR ...但它仍然归结为使用某种 OR 语法...因为..如何否则你会说“寻找这个或这个”吗?这就是 OR 类型语法的全部意义。
    • 好的,我明白了,但我认为这可以在一个正则表达式代码中完成。所以基本上,如果你搜索“大红苹果”,我只想找到这些单词以相同顺序排列的句子,而不是大红苹果。
    • 好的,所以您希望它们都出现在标题中并按顺序排列?见编辑
    • 是的。但看起来我发现了问题所在。确实非常有趣。 Utf8 麻烦不断。
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多