удаление точек и косых черт регулярное выражение - не относительный - PullRequest
4 голосов
/ 07 сентября 2010

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

Например, ../../../somefile/here/ (независимо от глубины), поэтому я просто получаю /somefile/here/

Ответы [ 6 ]

7 голосов
/ 07 сентября 2010

Не требуется регулярное выражение, используйте ltrim() с /. Как это:

 echo "/".ltrim("../../../somefile/here/", "/.");

Это выводит:

 /somefile/here/
2 голосов
/ 07 сентября 2010

Если я вас правильно понял:

$path = "/".str_replace("../","","../../../somefile/here/");  
2 голосов
/ 07 сентября 2010

Вы можете использовать функцию realpath () , предоставляемую PHP. Однако для этого требуется, чтобы файл существовал.

1 голос
/ 08 сентября 2010

Вы можете попробовать:

<?php
$str = '../../../somefile/here/';
$str = preg_replace('~(?:\.\./)+~', '/', $str);
echo $str,"\n";
?>
1 голос
/ 07 сентября 2010

Это должно работать:

<?php
echo "/".preg_replace('/\.\.\/+/',"","../../../somefile/here/")
?>

Вы можете проверить это здесь .

0 голосов
/ 07 сентября 2010

(\.*/)*(?<capturegroup>.*)

Первая группа соответствует некоторому количеству точек, за которыми следует косая черта, неограниченное количество раз; вторая группа - это та, которая вас интересует. Это лишит вас ведущей косой черты, поэтому добавьте косую черту.

Остерегайтесь того, что это не делает абсолютно никакой проверки, что ваша ведущая строка слешей и периодов не является чем-то явно глупым. Тем не менее, он не удалит начальные точки с вашего пути, как это сделал бы очевидный шаблон ([./])* для первой группы; он находит самую длинную строку точек и косых черт, которая заканчивается косой чертой, поэтому он не повредит вашему реальному пути, если он начинается с точки.

Помните, что очевидное "/." Стратегия ltrim () удаляет начальные точки из имен каталогов, и это плохо, если в вашем первом каталоге он полностью правдоподобен, поскольку начальные точки используются для скрытых каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...