具有括号和单词边界的Mongo $正则表达式

时间:2016-01-31 01:04:48

标签: regex mongodb

鉴于以下文件

{
  "_id": "test-id",
  "text": "this is some text and (0aef4666-3627-4c24-8e50-b0cf9a723823)"
}

以下mongo查询返回文档:

{"text":{"$regex":"\\(0aef4666-3627-4c24-8e50-b0cf9a723823\\)","$options":"iu"}}

但是这个没有:

{"text":{"$regex":"\\b\\(0aef4666-3627-4c24-8e50-b0cf9a723823\\)\\b","$options":"iu"}}

我想在单词边界上搜索uid。我认为添加\ b会正确地拾取它,但它显然不匹配,即使我正在寻找的术语位于文本的中间(我想也许它是在字符串末尾的事实)正在影响它,但它似乎并没有。)

为什么这项工作不起作用?如何才能使我的括号术语与#34;整个单词匹配?#34;?

1 个答案:

答案 0 :(得分:2)

这是因为\b仅匹配其中任何一侧的单词字符。在您的情况下,\b由空格字符和开/关括号括起来,两者都不是"字"字符。因此\b匹配失败。

你可以做到

\\b0aef4666-3627-4c24-8e50-b0cf9a723823\\b

将与\b匹配,因为它现在位于单词边界。

或者,您可以匹配空格OR开头/结尾:

db.test.find({"text": /(^|\s)\(0aef4666-3627-4c24-8e50-b0cf9a723823\)($|\s)/i} )