否定先読み・否定戻り読み
Apacheの設定でこれを使う機会が出てきました。
難しいことはしたくなかったのですが、他に手が思い浮かばなかったので仕方ありません。
参考サイト:XREA.COM
先読み | (?=regexp) | regexpにマッチする文字列の直前にマッチ |
否定先読み | (?!regexp) | regexpにマッチする文字列の直前でない場所にマッチ |
戻り読み | (?<=regexp) | regexpにマッチする文字列の直後にマッチ。regexpは長さがあらかじめ確定しているような正規表現でなくてはならない |
否定戻り読み | (?<!regexp) | regexpにマッチする文字列の直後でない場所にマッチ。regexpは長さがあらかじめ確定しているような正規表現でなくてはならない |
教科書通りな説明でわかりにくいです。
先読みの例
irb(main):001:0> matcher = /b(?=cd)cde/ => /b(?=cd)cde/ irb(main):002:0> matcher =~ "abcde" => 1
b(?=cd)という正規表現は、「後ろに"cd"が続く"b"」にマッチします。
Apacheの設定では、特定の拡張子のものをApacheに処理させ、それ以外をTomcatに扱わせるために、下記のように設定しました。
ProxyPassMatch ^/(.*(?<!\.jpg|\.png|\.css|\.js|\.html))$ \ ajp://localhost:8009/$1
ここでは、否定戻り読みを用いています。