Как мне найти абсолютный путь Unix и извлечь его с помощью Perl? - PullRequest
0 голосов
/ 28 февраля 2012

Я знаю, что можно использовать регулярные выражения, но не могу найти правильное. Также есть ли встроенные функции, которые делают это?

Ответы [ 3 ]

4 голосов
/ 28 февраля 2012

Я бы предложил вместо этого использовать основной модуль File :: Spec .Если вам просто нужно проверить, является ли то, что вам дано, абсолютным путем или нет, используйте file_name_is_absolute();если вам нужно преобразовать относительный путь в абсолютный, используйте rel2abs(), вы увидите шаблон.) Это проще и намного удобочитаемее.

2 голосов
/ 28 февраля 2012

Дано:

bmake: stopped in /bb/cc/xx/yy/zz/aa

Это регулярное выражение будет извлекать путь:

m%\s(/.*)%

Он ищет символ пробела, за которым следует косая черта, за которой следует что-либо.Если в именах путей нет пробелов, вы можете использовать более строгие ограничения:

m%\s(/\S*)%

Если вы уверены, что у вас всегда будет один или несколько компонентов пути к именам, выМожно добавить больше ограничений:

m%\s(/\S+/\S*)%

И так далее.Чем больше вы знаете о том, что может быть допустимо в пути, тем выше ваши шансы сопоставить только имя файла.Но обратите внимание, что имя файла в Unix может содержать любой символ, кроме / (потому что это разделитель между разделами имени пути) и \0, байт NUL.Все остальное - переводы строк, вкладки, элементы управления и т. Д. - является честной игрой и может быть частью имени файла.К счастью, большинство из них обычно не присутствует в именах файлов.

Обратите внимание, что относительные имена путей даже сложнее, чем имена абсолютных путей.

1 голос
/ 28 февраля 2012

/(.+/)*.* используйте этот шаблон.Косая черта в начале, затем каталоги (может и не быть) и имя файла или имя каталога в конце (это может быть не так).На самом деле это будет соответствовать всему, что начинается с косой черты, но это нормально, потому что путь в unix может содержать все, кроме \0.

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