我需要一个与一组搜索字词中的所有字词匹配的正则表达式。如果用户输入“bat sun”,那么我需要匹配任何包含以“bat”开头且以“sun”开头的单词的文本条目。因此,“星期日蝙蝠侠”和“蝙蝠侠日程”都应匹配,但“星期日”或“蝙蝠侠”将不匹配,因为并非所有搜索词都匹配。
我正在使用MongoDB(官方C#驱动程序)中的表达式来支持搜索。
谢谢!
答案 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