Я пытаюсь написать регулярное выражение для сопоставления путей к файлам со следующими характеристиками:
- не содержит
/./
или /../
- должно быть как минимум вложеннымодин подкаталог глубоко внутри
/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
как-то удовлетворяет (?!.*\.?\.\/)
.
Может кто-нибудь объяснить, что я делаю неправильно, и помочь мне исправить свое выражение?