Я хочу проверить, является ли строка именем файла (имя DOT ext) или нет.
Имя файла не может содержать / ? * : ; { } \
/ ? * : ; { } \
Не могли бы вы предложить мне выражение регулярного выражения для использования в preg_match ()?
Ну вот:
"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"
«Один или несколько символов, которые не являются ни одним из этих, а затем точкой, а затем еще несколько символов, которые не являются этими».
(Пока вы уверены, что точка действительно нужна, а если нет, это просто: "[^/?*:;{}\\]+"
$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:]]+)*$")