正则表达式以匹配具有特定前缀的文件路径

时间:2018-10-03 13:56:44

标签: regex mongodb mongodb-query regex-lookarounds

在MongoDB 4.0中,我们有包含如下路径的文档:

/abcd/name.txt
/abcd/efg/name2.txt
/abcd/gha/name3.txt
/ab/gha/name3.txt

我试图用正则表达式创建一个查询,该查询将使行与指定目录(路径前缀)中的文件匹配,而不与目录匹配。例如:

name.txt中只有文件/abcd/

我第一次尝试使用正则表达式是这样的:

/\/abcd\/((?!\/).)*/gm

不幸的是,这也将第二和第三行与目录匹配。

Regexr.com

/abcd/name.txt
/abcd/efg/name2.txt
/abcd/gha/name3.txt

下次尝试是这样的:

/^(?=\/abcd\/)((?!\/).)*/gm

但是此表达式不匹配任何内容。

哪个正则表达式将与第一行(目录/ abcd /中的文件名)匹配,并排除第二和第三(目录)?

3 个答案:

答案 0 :(得分:1)

我认为这是您想要做的:

/^\/abcd\/([^\/]+\.*$)/gm

https://regex101.com/r/rJNFs9/1

答案 1 :(得分:1)

您不需要组和前行-这只是mongo中的正则表达式匹配。查询可能像

一样简单
db.collection.find({fieldname:/^\/abcd\/[^\/]+$/})

答案 2 :(得分:0)

您需要检查扩展范围,例如:/\/abcd\/((?!\/).)*\./gm
实际操作如下:regexr