как я мог удалить конечные косые черты и точки из пути, отличного от корня.
Например, ../../../somefile/here/
(независимо от того, насколько это глубоко), поэтому я просто получаю /somefile/here/
Нет необходимости в регулярном выражении, скорее используйте ltrim()
с /.
, Как это:
echo "/".ltrim("../../../somefile/here/", "/.");
Эти результаты:
/somefile/here/
Вы можете использовать функцию realpath (), предоставляемую PHP. Однако для этого требуется, чтобы файл существовал.
Если бы я понял вас правильно:
$path = "/".str_replace("../","","../../../somefile/here/");
Это должно работать:
<?php echo "/".preg_replace('/\.\.\/+/',"","../../../somefile/here/") ?>
Вы можете проверить его здесь .
Вы можете попробовать:
<?php $str = '../../../somefile/here/'; $str = preg_replace('~(?:\.\./)+~', '/', $str); echo $str,"\n"; ?>
(\.*/)*(?<capturegroup>.*)
Первая группа соответствует некоторому количеству точек, за которыми следует косая черта, неограниченное количество раз; вторая группа – это то, что вас интересует. Это лишит вашу косую черту, поэтому добавьте косую черту.
Помните, что это абсолютно не подтверждает, что ваша ведущая строка косых черт и периодов не является чем-то явно глупым. Однако он не будет ([./])*
ведущие точки с вашего пути, как очевидный ([./])*
шаблон для первой группы; он находит самую длинную цепочку точек и косых черт, которая заканчивается косой чертой, поэтому она не повредит вашему реальному пути, если она начнется с точки.
Имейте в виду, что очевидный «/». Стратегия ltrim () будет лишать ведущие точки из имен каталогов, что является Плохим, если ваш первый каталог имеет совершенно правдоподобное, поскольку ведущие точки используются для скрытых каталогов.