我正在使用正则表达式锚搜索索引,如下所示:
/^[Anchor1]/
这一切都很好。它匹配以“Anchor1”开头的所有值,并使用idex来执行此操作。
但是,我想匹配许多起始字符串中的一个,如下所示:
/^[Anchor1][Anchor2][Anchor3][Anchor4]/
它太慢而且没有回来。这适用于任何超过3个锚点的情况。我很确定这很简单。要么我的正则表达式是垃圾(我希望这种情况如此 - 我讨厌正则表达式)或者我的mongo-fu很弱。我正在使用Java驱动程序,如果这是相关的。
我的问题是:
我在这里做错了什么?我希望能够利用mongo索引来匹配几个可能的起始字符串之一。
更新
DOH。我的正则表达是垃圾。它应该是(感谢Sammaye):
^(Anchor1|Anchor2|Anchor3)
但它仍然很慢。我会打开一个更清晰的问题。
答案 0 :(得分:1)
嗯,你仍然没有多大意义,因为^[Anchor]
在字符串的开头不匹配Anchor
,而是匹配任何A
,n
,字符串开头的,c
,h
,o
或r
,这种情况正在发生,因为您使用的是字符类[]
。
要匹配您需要使用的字符串开头名为Anchor
的锚:
^Anchor
您不需要任何角色类。
如果有多个锚点,那么你可以这样做:
^(?:Anchor|Anchor1|Anchor2|...|AnchorN)
除非您告诉我们您要匹配的确切锚点,否则无法进一步优化。