web-dev-qa-db-ja.com

正規表現はこれに一致しますORそれ?

これの正規表現は何ですか?

文字列の場合に一致

  • NOT(.phpで終わるOR .htmlで終わるORは/を含む)

ありがとうございました!

編集:NOTを回避するためにmod_rewriteのロジックを変更できないため、Apache modの書き換えで式が使用されるため、NOTの部分が必要です。

編集:私の最初の努力は([^/]+)(\.html)$(^\.php)$でした-これはひどく間違っています

11
johnjohn

このドキュメント によると、Apache mod_rewriteは否定をサポートします

Mod_rewriteでは、NOT文字( '!')も可能なパターンプレフィックスとして使用できます。これにより、パターンを無効にすることができます。たとえば、「現在のURLがこのパターンと一致しない場合」などです。これは、ネガティブパターンに一致させるのが簡単な例外的な場合、または最後のデフォルトルールとして使用できます。

したがって、次のようなことができるはずです。

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

そして、それは/を含まず、.phpまたは.htmlで終わらないものと一致する必要があります

13
Peter Boughton

ネガティブマッチよりも正規表現でポジティブマッチを行う方がはるかに簡単です。 ends in .php OR ends in .html OR contains /を検索して、プログラムのロジックを逆にしてみてください。

厳密な正規表現では、特定の式を否定する一般的な方法はありません。 PCREを使用すると、パフォーマンスを犠牲にして、ネガティブ検索を構築するプロセスを大幅に簡素化するネガティブ先読みの利点があります。

^([^/]*\.(?!html$|php$)[^./]*)|[^/.]$
5
Eclipse

この正規表現を使用してください-

(.*\.php$)|(.*\.html$)|(.*\/.*)
1
Gopi