Дано:
bmake: stopped in /bb/cc/xx/yy/zz/aa
Это регулярное выражение будет извлекать путь:
m%\s(/.*)%
Он ищет символ пробела, за которым следует косая черта, за которой следует что-либо.Если в именах путей нет пробелов, вы можете использовать более строгие ограничения:
m%\s(/\S*)%
Если вы уверены, что у вас всегда будет один или несколько компонентов пути к именам, выМожно добавить больше ограничений:
m%\s(/\S+/\S*)%
И так далее.Чем больше вы знаете о том, что может быть допустимо в пути, тем выше ваши шансы сопоставить только имя файла.Но обратите внимание, что имя файла в Unix может содержать любой символ, кроме /
(потому что это разделитель между разделами имени пути) и \0
, байт NUL.Все остальное - переводы строк, вкладки, элементы управления и т. Д. - является честной игрой и может быть частью имени файла.К счастью, большинство из них обычно не присутствует в именах файлов.
Обратите внимание, что относительные имена путей даже сложнее, чем имена абсолютных путей.