Регулярное выражение для поиска действительного имени файла

Я хочу проверить, является ли строка именем файла (имя DOT ext) или нет.

Имя файла не может содержать / ? * : ; { } \ / ? * : ; { } \

Не могли бы вы предложить мне выражение регулярного выражения для использования в preg_match ()?

Solutions Collecting From Web of "Регулярное выражение для поиска действительного имени файла"

Ну вот:

 "[^/?*:;{}\\]+\\.[^/?*:;{}\\]+" 

«Один или несколько символов, которые не являются ни одним из этих, а затем точкой, а затем еще несколько символов, которые не являются этими».

(Пока вы уверены, что точка действительно нужна, а если нет, это просто: "[^/?*:;{}\\]+"

 $a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc'); ^ ... $ - begin and end of the string [^ ... ] - matches NOT the listed chars. 

Регулярное выражение будет чем-то вроде (для трехбуквенного расширения):

 ^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$ 

PHP нуждается в обратных косых чертах, и preg_match() нуждается в перекосах,

 $pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/"; 

Чтобы соответствовать именам файлов, например "hosts" или ".htaccess" , используйте это слегка измененное выражение:

 ^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$ 

Ниже регулярного выражения, используемого для проверки имени файла Unix в программе Golang:

  reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")