Я не уверен, что понимаю вашу цель. Я пишу следующий ответ с предположением, что вы хотите совпадать с именем пути POSIX. Так как в Linux / Unix имя файла может содержать любые символы, кроме NUL,: и /, это может быть очень сложно (или просто, зависит от того, что вы можете ввести).
Самый простой способ - сопоставить каждую строку, которая не содержит этих символов (за исключением /, потому что это используется в пути):
^[^\x00:]+$
Если мы получим какое-либо совпадение, это означает, что строка может быть именем файла (или полным путем).
Затем мы можем добавить предположение, что в имени пути не будет символа новой строки, поэтому мы можем обновить регулярное выражение до:
^[^\x00\n:]+$
Иногда нам нужен только абсолютный путь, поэтому мы сопоставляем / в начале строки:
^/[^\x00\n:]+$
Вы также можете добавить требование, чтобы путь приводил как минимум к 2 каталогам от корня:
^(/[^\x00\n:/]*){3,}$
Мы можем добавить больше ограничений к именам файлов, но вы поймете, что нужно.
Возможно, вы захотите объединить каждый сегмент пути в группу, тогда у вас может возникнуть проблема, потому что мы не знаем, сколько будет групп. Это может или не может быть достигнуто с помощью рекурсии, но не каждый движок регулярных выражений поддерживает это.