我正在尝试编写正则表达式来匹配具有以下特征的文件路径:
/./
或/../
/tmp/media
.log
Here是我到目前为止所做的:
\/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)
我已阅读this question,并成功实现了部分答案,但是当我不想要它时,/ tmp / media / log.log仍然匹配。我怀疑是因为/media/
和log.log
之间的空字符串以某种方式满足(?!.*\.?\.\/)
。
任何人都可以解释我做错了什么并帮助我纠正我的表达吗?
答案 0 :(得分:1)
是否有必要成为正则表达式?如您提供的链接中所示,您可以使用readlink。此外,在为其他约束进行正则表达式匹配之前,检查/./
和/../
会更容易 - 这会使您的代码更清晰。
答案 1 :(得分:1)
答案 2 :(得分:1)
你应该真正首先对你的路径进行封装。这将避免尝试阻止正则表达式本身中的.
和..
目录。完成后,正则表达式变为:
\/tmp\/media\/[^\/]+\/.*\.log
在不知道您编程的语言的情况下,我无法建议路径规范化机制。