鉴于以下文件
{
"_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;?
答案 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} )