@roskoshinsky

Как задать отрицание подстроки в регулярных выражениях (PHP, preg_match)?

Есть некоторая файловая функция «x», которая возвращает список файлов. Список файлов должен фильтроваться и в основе фильтра хочется использовать регулярное выражение.

function x($sFileMask){
…
if(preg_match($sFileMask, $sFileOfList)){
…
} // if
…
} // x


В некоторых случаях необходимо, чтобы фильтр проходили все файлы КРОМЕ, к примеру, определённого расширения.

Допустим, нужно отфильтровать все файлы, кроме тех, что имеют расширение psd. Пробовал так $sFileMask = "|([^(\.psd)])$|" и вроде бы всё ожидаемо работает, фильтр пропускает "file.gif", "file.doc". Но! НЕ пропускает не только "file.psd" но и "file.dod" (то есть одна из букв регулярного выражения на конце)

Как сделать шаблон регулярного выражения соответствующим моим входящим условиям? чтобы пропускал все файлы, кроме тех, что имеют определённое расширение?
  • Вопрос задан
  • 9146 просмотров
Пригласить эксперта
Ответы на вопрос 1
booomerang
@booomerang
Разработчик крутизны
.*\.(?!psd)$
Должно быть что-то подобное, но оно не работает почему-то.
Регулярка должна учитывать вариант .psdd и .pdapsd, и не должна только .psd

.*\.(?!psd$) - Вот рабочее решение :)

file.psdd - так пропускает
file.ppsd - так пропускает
file.psd - так не пропускает!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы