我试图编写一个正则表达式来匹配具有以下特征的文件路径:
/./或/..//tmp/media中嵌套至少一个子目录。.log结尾到目前为止,我拥有的是这里:
\/tmp\/media\/(?!.*\.?\.\/)+(?:.*\.log)下面是我想要的结果(如果字符串不匹配,我引用不满足的要求):
/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之间的空字符串某种程度上满足了(?!.*\.?\.\/)。
有人能解释我做错了什么,并帮助我纠正我的表情吗?
发布于 2010-12-08 15:46:52
你可以试试这个:
^(?![^.]*\/\.\.?\/)\/tmp\/media\/(?:[^\/]+)*\/\w+\.log$轮状连杆
发布于 2010-12-08 15:44:55
有必要成为一个正则表达式吗?正如您提供的链接中所建议的那样,您可以使用readlink。此外,在对其他约束进行正则匹配之前,只检查/./和/../就更容易了--这将使代码更简洁。
发布于 2010-12-08 15:48:10
你真的应该先把你的道路奉为圣道。这将避免试图阻止regex本身中的.和..目录。一旦您这样做了,regex就变成:
\/tmp\/media\/[^\/]+\/.*\.log如果不知道你在用哪种语言编程,我就不能建议一种路径认证机制。
https://stackoverflow.com/questions/4389277
复制相似问题