Regex соответствуют этому ИЛИ этому?

Каков regex для этого?

Соответствие, если строка

  • НЕ (заканчивается в .php ИЛИ концах в .html ИЛИ содержит/),

Спасибо!

Править: Мне нужна НЕ часть, потому что выражение должно использоваться на модификации Apache, переписывают, так как я не могу изменить логику модификации _rewrite для предотвращения НЕТ.

Править: Мои первоначальные усилия были ([^/] +) (. HTML) $ (^.php) $ - который является чудовищно неправильным

9
задан johnjohn 27 July 2010 в 16:57
поделиться

3 ответа

Apache mod_rewrite действительно поддерживает отрицание, согласно этого документа .

В mod_rewrite символ НЕ ('!') также доступен как возможный префикс шаблона. Это позволяет вам свести на нет узор; сказать, для экземпляр: `` если текущий URL НЕ соответствует этому шаблону ''. Это может быть используется в исключительных случаях, когда легче сопоставить отрицательный шаблон или как последнее правило по умолчанию.

Таким образом, вы должны иметь возможность сделать что-то вроде:

!^(.*?/.*|.*?\.(?:php|html)$)$

И это должно соответствовать всему, что не содержит / и не заканчивается на .php или .html

12
ответ дан 4 December 2019 в 11:39
поделиться

В регулярном выражении намного проще выполнять положительные совпадения, чем отрицательные. Попробуйте найти , оканчивающийся на .php ИЛИ оканчивающийся на .html ИЛИ содержащий / , и измените логику в вашей программе.

При использовании строгих регулярных выражений нет общего способа отрицать данное выражение. С помощью PCRE у вас есть преимущество отрицательного упреждения, которое значительно упрощает процесс построения отрицательного поиска за счет производительности.

^([^/]*\.(?!html$|php$)[^./]*)|[^/.]$
5
ответ дан 4 December 2019 в 11:39
поделиться

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

(.*\.php$)|(.*\.html$)|(.*\/.*)
1
ответ дан 4 December 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: