正则表达式匹配所有搜索词

时间:2011-05-17 18:18:57

标签: regex

我需要一个与一组搜索字词中的所有字词匹配的正则表达式。如果用户输入“bat sun”,那么我需要匹配任何包含以“bat”开头且以“sun”开头的单词的文本条目。因此,“星期日蝙蝠侠”和“蝙蝠侠日程”都应匹配,但“星期日”或“蝙蝠侠”将不匹配,因为并非所有搜索词都匹配。

我正在使用MongoDB(官方C#驱动程序)中的表达式来支持搜索。

谢谢!

3 个答案:

答案 0 :(得分:1)

根据您对“字词”的定义,您可以使用\b来匹配单词的开头。

至于检查两个结果,使用两个匹配要容易得多。

/\bsun/i && /\bbat/i          # Engines without implicit anchoring
/.*\bsun.*/i && /.*\bbat.*/i  # Engines with implicit anchoring

如果您的正则表达式引擎支持零宽度前瞻,则可以这样做。

/^(?=.*\bsun)(?=.*\bbat)/si   # Engines without implicit anchoring
/^(?=.*\bsun).*\bbat/si       # Engines without implicit anchoring
/(?=.*\bsun)(?=.*\bbat).*/si  # Engines with implicit anchoring

答案 1 :(得分:0)

如果您真的想使用正则表达式,可能是下面的正则表达式:

(?=.*\bsun)(?=.*\bbat).*

当然你想让它忽略大小。

答案 2 :(得分:0)

我认为你可以按照以下方式做点什么:

.find( { Item: { $regex : /\b[Term1]/i, $regex : /\b[Term2]/i, $regex : /\b[TermN]/i } } );

请参阅:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions