Шаблон для фильтрации файлов с несколькими объединенными расширениями - PullRequest
0 голосов
/ 19 февраля 2019

Как создать регулярное выражение, чтобы соответствовать

qwerty.html

, но не

qwerty.php.html

или любому комбинированному расширению.Я "создал" это: "/(?!\..*)\.html$/", который возвращает 0. Как заставить это работать?

Это код, который у меня есть:

$regexIterator = new RegexIterator(
    new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)),
    /(?!\..*)\.html$/
);
$files = (iterator_to_array($regexIterator));

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Используйте следующее регулярное выражение

^([^.]*)\.[^.]*$

Соответствует строкам, содержащим только одну точку - пример здесь - объяснение

  • [^.]* соответствует любому символу, крометочка

Для поиска только html-файлов используйте ^([^.]*)\.html*$

0 голосов
/ 19 февраля 2019

Вы регулярное выражение не работает, потому что вы говорите, что следующие символы не должны включать в себя точку (например, (?!\..*)), но сразу же вы говорите, что они должны (т.е. .html).

единственное решение, которое было бы приемлемым, это следующее:

\.\w+\.html$(*SKIP)(*F)|\.html$

Regex live demo

Распределение регулярных выражений:

  • \.\w+\.html$ Match.html файл с предыдущим расширением
  • (*SKIP)(*F) Выбросьте его
  • | Или
  • \.html$ Соответствует .html файлу, который имеетне предшествующее расширение

Это не позволяет .{alphanum + _}.html, например:

  • .php.html
  • .mp4.html
  • .j_p_g.html

Но не связывается с разными именами файлов одновременно и допускает шаблоны, как показано ниже:

  • a.file.name@user.html
0 голосов
/ 19 февраля 2019

Шаблон (?!\..*)\.html$ соответствует .html в конце строки, только если справа от текущего местоположения нет . (отрицательное предвидение (?!\..*) применяет это ограничение).Примечание .* в конце шаблона прогнозирования не имеет значения.Поскольку \. в \.html требует, чтобы точка находилась там, где (?!\..*) запрещает это, шаблон никогда не будет совпадать ни с одной строкой.

Вы можете использовать

'~^[^.]*\.html$~'

См. regex demo

Подробности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...