首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex捕获所有不包含目录链接的文件路径。

regex捕获所有不包含目录链接的文件路径。
EN

Stack Overflow用户
提问于 2010-12-08 15:38:03
回答 3查看 2.4K关注 0票数 3

我试图编写一个正则表达式来匹配具有以下特征的文件路径:

  1. 不包含/.//../
  2. 必须在/tmp/media中嵌套至少一个子目录。
  3. 必须以.log结尾

到目前为止,我拥有的是这里

代码语言:javascript
复制
\/tmp\/media\/(?!.*\.?\.\/)+(?:.*\.log)

下面是我想要的结果(如果字符串不匹配,我引用不满足的要求):

代码语言:javascript
复制
/tmp/media/log.log             //NO-MATCH (2)
/tmp/media/test/log.log        //MATCH
/tmp/media/../log.log          //NO-MATCH (1)
/tmp/media/./log.log           //NO-MATCH (1)
/tmp/media/test/../log.log     //NO-MATCH (1)
/tmp/media/../test/log.log     //NO-MATCH (1)
/tmp/media/.t/log.log          //MATCH
/tmp/media/.../log.log         //MATCH
/tmp/log.log                   //NO-MATCH (2)
/tmp/media/test/log.notlog     //NO-MATCH (3)
/tmp/media/test/./log.log      //NO-MATCH (1)

我已经阅读了这个问题,并成功地实现了一些答案,但是当我不想要它时,/tmp/media/log.log仍然是匹配的。我怀疑这是因为/media/log.log之间的空字符串某种程度上满足了(?!.*\.?\.\/)

有人能解释我做错了什么,并帮助我纠正我的表情吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-08 15:46:52

你可以试试这个:

代码语言:javascript
复制
^(?![^.]*\/\.\.?\/)\/tmp\/media\/(?:[^\/]+)*\/\w+\.log$

轮状连杆

票数 2
EN

Stack Overflow用户

发布于 2010-12-08 15:44:55

有必要成为一个正则表达式吗?正如您提供的链接中所建议的那样,您可以使用readlink。此外,在对其他约束进行正则匹配之前,只检查/.//../就更容易了--这将使代码更简洁。

票数 1
EN

Stack Overflow用户

发布于 2010-12-08 15:48:10

你真的应该先把你的道路奉为圣道。这将避免试图阻止regex本身中的...目录。一旦您这样做了,regex就变成:

代码语言:javascript
复制
\/tmp\/media\/[^\/]+\/.*\.log

如果不知道你在用哪种语言编程,我就不能建议一种路径认证机制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4389277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档