удаление точек и косые регулярные выражения – не относительные

как я мог удалить конечные косые черты и точки из пути, отличного от корня.

Например, ../../../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 () будет лишать ведущие точки из имен каталогов, что является Плохим, если ваш первый каталог имеет совершенно правдоподобное, поскольку ведущие точки используются для скрытых каталогов.