m個の文字列の内、n個以上の別々の文字列を含む行を検索する正規表現

著者:杉浦

m個の文字列の内、n個以上の別々の文字列を含む行を検索する正規表現

 例えばmagickかconvertかcropかrtkを3つ以上含む行を検索する正規表現は次になります。

^.*(magick|convert|crop|rtk)(?!.*\1).*(magick|convert|crop|rtk)(?!.*(?:\1|\2)).*(magick|convert|crop|rtk).*


 後方参照によって既に選ばれた文字列を除外する、というのがこの正規表現の考えです。.*(magick|convert|crop|rtk)でキーワードが出るまで読み、(?!.*\1)で既に読んだキーワードを弾く、というのを繰り返します。ワンパターンの繰り返しですので、この構文をつくるプログラムを作ったりなんかすると楽です。次はjavascriptのサンプルです。


p = '(magick|convert|crop|rtk)'
r = '^'
for(i = 1; i < 3; i++){
    r = r + '.*'+ p + '(?!.*(?:\\1'
    for(j = 2; j <= i; j++){
        r = r + '|' + '\\' + j
    }
    r = r + '))'
}
r = r + '.*'
  • この記事いいね! (0)

著者について

杉浦 administrator