
正規表現で、「とあるパターン以外でマッチさせたい」というケースが出てきました。
例えばリファラでドメインyahoo.co.jp以外をマッチさせたい的な。
対応には「否定先読み」「否定戻り読み」が必要だと分かりました。
参考
http://www-creators.com/archives/1827
例えば、google.co.jp / google.com / yahoo.co.jp からの流入に対して、マッチさせたい のであれば、
/^(https?:\/\/[^\/]*?yahoo\.co\.jp\/?|https?:\/\/[^\/]*?google\.(co\.jp|com)\/?).*?$/
といった形になりましすが、google.co.jp / google.com / yahoo.co.jp 以外をマッチさせたい 場合は
/^(?!(https?:\/\/[^\/]*?yahoo\.co\.jp\/?|https?:\/\/[^\/]*?google\.(co\.jp|com)\/?)).*?$/
といった形になります。
ちなみにお気づきかもですが、
上記正規表現は、サブドメインも想定した作りになっています。
たとえば search.yahoo.co.jp に対しても同様に除外できる感じです。
正規表現はエスケープも多いので、結果ぱっと見、よくわからない感じになりがちなのですが、もう少し見通しの良い書き方をしたいですね。