忽略MySQL REGEXP查询中常见的单词(the,and)

时间:2011-04-07 15:29:36

标签: php mysql regex

我正在尝试根据标题的第一个字母查询图书标题的数据库。但是,我想忽略常用词,例如“The”和“A”。

因此,在搜索以字母“T”开头的书籍时

"The Adventures of Huck Finn" - would NOT be matched
"Transformation of a Runner" - would be matched

我对REGEX不是很有经验,但这是我到目前为止($ first_letter可能等于't')

... WHERE title = '^[(a )(the )]*[$first_letter]' ...

这甚至在单词“A”或“The”之后成功匹配以特定字母开头的书名,但不会忽略这些单词。因此,如果$ first_letter ='t',它将匹配上面提到的两本书。

我试过谷歌搜索,但没有找到任何解决方案。任何帮助将不胜感激。

提前致谢。

凯文

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您编写的正则表达式无效。 []用于表示所谓的字符类。您在括号中输入的所有内容(某些字符可能需要转义,例如文字字符[])都被视为单个字符的替身

编辑重新阅读我的答案后,我意识到环视并不是解决此问题的好方法。

您正在摸索的功能称为负向前瞻负面后瞻或某些类似变体。我不确定MySQL的正则表达式是否支持它,但我认为它不适合这个问题。

或者,您可以执行如下所示的正则表达式:

^((a|the|of|and) )?[letter of interest]

细分:

  • 有两组
    • 最里面的组会查找您要忽略的单词实例
    • 最外面的组只是在那个
    • 的末尾添加了一个空格
  • ?断言该群组可能有01个实例

你必须自己完成将其转换为MySQL正则表达式语法的工作。道歉。