2016-08-18 11 views
1

しばらく私を悩ましている問題を助けてください!Apache2正規表現オプションのキャプチャグループ

URLと一致するApache AliasMatch正規表現を作成しようとしています。私が持っている問題は、ファイル一致部分内で変数$0 $1 $2としてキャプチャグループを使用していることです。基本的に私は実際にファイルをつかむためにURLのpath/to/controller部分をキャプチャする必要があり、二重スラッシュの後にキャプチャグループを使用しないことを望みます。

http://domain.com/etc/xx/abc/パス/に/コントローラ // myDesiredMVCAction

問題は、基本的に次の式でいることである:

^/etc/(xx|yy)/(abc|xyz)/(.*)(?=//)(.*)

それだけ

http://domain.com/etc/xx/abc/path/to/controller//myDesiredMVCAction

と一致します〜ないD:ダブルスラッシュとすべてがそれを末尾にはオプションであることを考えると

http://domain.com/etc/xx/abc/path/to/controller

私は?を追加することによって、正規表現の式をオプションにするときだから、//myDesiredMVCAction部分を含むことにより、キャプチャグループ遺跡..

^/etc/(xx|yy)/(abc|xyz)/(.*)(?=//)(.*)?

私が後だものを達成することは可能でしょうか?

答えて

1

は、私はあなたの事は、パターンの(.*?)(?://.*)?$一部は、それがいい加減にして定量化されるので、(.*?)が最初に試されていないような方法で働くあるregex demo

を参照してください

^/etc/(xx|yy)/(abc|xyz)/(.*?)(?://.*)?$ 
         ^^^^^^^^^^^^^^^ 

使うことができると信じて*?および(?://.*)?$が最初に試行され、後者が一致しない場合は、(.*?)が展開され、各展開ステップでグループ値に文字が書き込まれます。

パターンが一致します。

  • ^/etc/ - その後、xxまたはyy/
  • (abc|xyz)/ - - /etc/ベースURL
  • (xx|yy)/後に後abcまたはxyz/
  • (.*?) - 0以上の任意の文字、しかし最初
  • (?://.*)?できるだけ少ない - 文字列入力の終わり - 2つの/ sは
  • $に、任意の文字で最大できるだけ多くを、続いて(端に起因?にオプションのグループ) 。
+0

ありがとう@ウィクスター!貪欲な定量化が私の思考プロセスに似ていないようです。今日の新しい何かを学びました:IQ + 1;) – xRavisher

+1

怠け者と欲張りな量子化器は、 [*この正規表現のパフォーマンスをさらに向上させることはできますか?](http://stackoverflow.com/questions/33869557/can-i-improve-performance-of-this-regular-expression-further/33869801#33869801)。 –

関連する問題