Regex соответствует этому или что? - PullRequest
8 голосов
/ 27 июля 2010

Что такое регулярное выражение для этого?

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

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

Спасибо!

Редактировать: мне нужна часть НЕ, потому что выражение должно использоваться при перезаписи мода Apache, так как я не могу изменить логику мода _rewrite, чтобы избежатьНЕ.

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

Ответы [ 3 ]

10 голосов
/ 27 июля 2010

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

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

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

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

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

4 голосов
/ 27 июля 2010

Гораздо проще делать положительные совпадения в регулярном выражении, чем отрицательные. Попробуйте найти ends in .php OR ends in .html OR contains / и изменить логику в вашей программе.

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

^([^/]*\.(?!html$|php$)[^./]*)|[^/.]$
1 голос
/ 27 июля 2010

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

(.*\.php$)|(.*\.html$)|(.*\/.*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...