1

我正在使用正则表达式锚搜索索引,如下所示:

/^[Anchor1]/

一切都很好。它匹配以“Anchor1”开头的所有值,并使用 idex 来执行此操作。

但是,我想匹配多个起始字符串之一,如下所示:

/^[Anchor1][Anchor2][Anchor3][Anchor4]/

它太慢了,它不会返回。这适用于超过 3 个锚点的任何情况。我相当肯定这很简单。要么我的正则表达式是垃圾(我希望这可能是这种情况 - 我讨厌正则表达式)或者我的 mongo-fu 很弱。如果相关,我正在使用 Java 驱动程序。

我的问题是:

我在这里做错了什么?我希望能够利用 mongo 索引来匹配几个可能的起始字符串之一。

更新

多哈。我的正则表达式是垃圾。它应该是(感谢 Sammaye):

^(Anchor1|Anchor2|Anchor3)

虽然它仍然很慢。我会提出一个更清楚的问题。

4

1 回答 1

1

好吧,您仍然没有多大意义,因为在字符串的开头^[Anchor]不匹配Anchor,而是在字符串的开头匹配任何A, n, ,c, h, or这是因为您使用的是字符类而发生的[]

要匹配以字符串开头命名的锚点Anchor,您需要使用:

^Anchor

为此,您不需要任何字符类。

如果有多个锚点,那么你可以这样做:

^(?:Anchor|Anchor1|Anchor2|...|AnchorN)

除非您告诉我们您要匹配的确切锚点是什么,否则无法进一步优化。

于 2013-11-04T14:16:08.880 回答