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

  • 2018年9月13日
  • 2018年9月13日
  • 言語

 例えば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 + '.*'
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG