浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

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

^.*(magick|convert|crop|rtk)(?!.*).*(magick|convert|crop|rtk)(?!.*(?:|)).*(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 + '(?!.*(?:\'
    for(j = 2; j <= i; j++){
        r = r + '|' + '\\' + j
    }
    r = r + '))'
}
r = r + '.*'
  • この記事いいね! (0)