Каков regex для этого?
Соответствие, если строка
- НЕ (заканчивается в .php ИЛИ концах в .html ИЛИ содержит/),
Спасибо!
Править: Мне нужна НЕ часть, потому что выражение должно использоваться на модификации Apache, переписывают, так как я не могу изменить логику модификации _rewrite для предотвращения НЕТ.
Править: Мои первоначальные усилия были ([^/] +) (. HTML) $ (^.php) $ - который является чудовищно неправильным
Apache mod_rewrite действительно поддерживает отрицание, согласно этого документа .
В mod_rewrite символ НЕ ('!') также доступен как возможный префикс шаблона. Это позволяет вам свести на нет узор; сказать, для экземпляр: `` если текущий URL НЕ соответствует этому шаблону ''. Это может быть используется в исключительных случаях, когда легче сопоставить отрицательный шаблон или как последнее правило по умолчанию.
Таким образом, вы должны иметь возможность сделать что-то вроде:
!^(.*?/.*|.*?\.(?:php|html)$)$
И это должно соответствовать всему, что не содержит / и не заканчивается на .php или .html
В регулярном выражении намного проще выполнять положительные совпадения, чем отрицательные. Попробуйте найти , оканчивающийся на .php ИЛИ оканчивающийся на .html ИЛИ содержащий /
, и измените логику в вашей программе.
При использовании строгих регулярных выражений нет общего способа отрицать данное выражение. С помощью PCRE у вас есть преимущество отрицательного упреждения, которое значительно упрощает процесс построения отрицательного поиска за счет производительности.
^([^/]*\.(?!html$|php$)[^./]*)|[^/.]$
Используйте это регулярное выражение -
(.*\.php$)|(.*\.html$)|(.*\/.*)