Регулярные выражения: сопоставление имен файлов, начинающихся с точки (.)?

Я полный Reg-exp noob, поэтому, пожалуйста, несите меня. Попробовал это сделать, но еще не нашел его.

Каким будет подходящий способ записи регулярных выражений, соответствующих файлам, начиная с точки, например .buildpath или .htaccess?

Спасибо большое!

Ответ 1

В большинстве языков регулярных выражений ^\. или ^[.] будет соответствовать ведущая точка.

Ответ 2

^ соответствует началу строки на большинстве языков. Это будет соответствовать ведущему .. Вам нужно добавить к нему свое имя файла.

^\.

Аналогично, $ будет соответствовать концу строки.

Ответ 3

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

^\.\w+

^ привязывает совпадение к началу строки, \. соответствует литеральному периоду (поскольку unescaped . в регулярном выражении обычно соответствует любому символу), а \w+ соответствует 1 или более "Слово" (буквенно-цифровой плюс _).

Дополнительную информацию о регулярных выражениях в стиле Perl и их синтаксисе см. в документации perlre.

Ответ 4

Это зависит от того, какие символы являются законными в имени файла, который зависит от ОС и файловой системы.

Например, в Windows это будет:

^\.[^<>:"/\\\|\?\*\x00-\x1f]+$

Вышеприведенное выражение означает:

  • Сопоставьте строку, начинающуюся с буквенного символа .
  • Далее следует по крайней мере один символ, который не является одним из целых классов недопустимых символов.

Я использовал this в качестве ссылки на то, какие символы запрещены в именах файлов.

Ответ 5

Чтобы соответствовать строке, начинающейся с точки в java, вам нужно написать простое выражение

^\\..*

^ означает, что регулярное выражение должно совпадать с началом строки. \. означает, что он начнется с строкового литерала "."
. * означает, что за точкой последует 0 или более символов

Ответ 6

Вам может потребоваться заменить \ на соответствующий символ пробега языка. Однако под Powershell я использую Regex: ^(\.)+\/

Тестовый пример:

"../NameOfFile.txt" -match '^(\\.)+\\\/'

работает, а

"_./NameOfFile.txt" -match '^(\\.)+\\\/'

нет.

Естественно, вы можете спросить, ну, что здесь происходит?

(\\.) ищет литерал ., за которым следует +, который соответствует предыдущему символу, по крайней мере, один или несколько раз.

Наконец, \\\/ гарантирует, что он соответствует пути файла Window.