睡人亭

秀丸エディタの正規表現

HmJre.dllで拡張された機能

HmJre.dllを指定する

最新の秀丸では、正規表現用のDLLとしてHmJre.dllが最初から指定されているはずです。

正規表現のDLLを確認中
正規表現のDLLを確認中

もし、これがJRE32.DLLになっている場合は、HmJre.dllに代えておきましょう。

  1. 始めに、メニューのその他動作環境を選択して動作環境のダイアログボックスを表示します。
  2. 次に設定の対象の部分から環境を左クリックして画面を切り替え、正規表現の部分のDLLの変更を左クリックします。
    動作環境のダイアログボックス
    動作環境のダイアログボックス
  3. 正規表現のDLLのダイアログボックスが表示されたら、HmJre.dllを左クリックしてからOKをクリックします。
    HmJre.dllを選択
    HmJre.dllを選択
  4. 設定の対象の画面に戻ったらOKを左クリックすれば設定終了です。
  5. もう一度、検索・置換・grepのダイアログボックスを開いて、正規表現のDLLを確認してください。

繰り返し指定形式

{n}(固定回数)

直前の文字・あるいは正規表現パターンを指定した回数繰り返したい場合に使用します。

繰り返したい回数をn(半角数値)で指定してください。

「あ」を10回
ああああああああああがマッチします)
メタ文字:あ{10}
数字を10回繰り返す(10桁の数字)。
メタ文字:[0-9]{10}

{n,}(n回以上)

直前の文字・あるいは正規表現パターンを指定した回数以上繰り返したい場合に使用します。

回数をn(半角数値)で指定してください。

「あ」を5回以上
ああああああああああああああがマッチします)
メタ文字:あ{5,}
三桁以上の数字
メタ文字:[0-9]{3,}

{n,m}(n回以上、m回以下)

直前の文字・あるいは表現パターンをn回以上m回以下の範囲で繰り返す場合に使用します。

nmの部分には数値が入ります。

あが2回以上4回以下で繰り返される
あああああああああがマッチします
メタ文字:あ{2,4}
ひらがなが三回以上五回以下で繰り返される
あいうえお あかさ  あいきか がマッチします
メタ文字:[ぁ-ん]{3,5}

後方一致・後方不一致指定

(?=文字列):後方一致指定

指定した文字・あるいは正規表現の後に、さらに別な指定した文字・あるいは正規表現が続くこと指定をし、かつ実際にヒットして欲しいのは前方部分だけにしたい場合には、[後方一致指定]を使用します。

文字列
學而篇
爲政篇
八佾篇
里仁篇
検索する文字列
某篇と続く文字列からの部分のみを選択。
メタ文字:.+(?=篇)
置換する文字列
置換結果
◆篇
◆篇
◆篇
◆篇

(?!):後方不一致指定

後方一致指定とは反対に、指定した文字・あるいは正規表現の後に、さらに別な指定した文字・あるいは正規表現が続かないこと指定をし、かつ実際にヒットして欲しいのは前方部分だけにしたい場合には、[後方不一致指定]を使用します。

文字列
第一巻
第一編
第一幕
第一場
検索する文字列
第一某という文字列を指定し、その中から第一幕のみを除外した「第一」を選択。
メタ文字:(第一)(?!幕)
置換する文字列
置換結果
◆巻
◆編
第一幕
◆場

注意事項

一致・不一致のパターンは、該当するキーワードが文章または単語の途中にあると、指定が上手くいかない場合があります。

前方一致・前方不一致指定

前方一致指定

指定した文字・あるいは正規表現の前に、さらに別な指定した文字・あるいは正規表現を指定し、かつ実際にヒットして欲しいのは後方部分だけにしたい場合には、[前方一致指定]を使用します。

文字列
本編
第一編
あの編
第二編
この編
第三編
第四編
検索する文字列
第某編という文字列を指定し、その中から第某のみを除外したを選択。
メタ文字:(?<=第.)編
置換する文字列
置換結果
本編
第一◆
あの編
第二◆
この編
第三◆
第四◆

前方不一致指定

指定した文字・あるいは正規表現の前に、さらに別な指定した文字・あるいは正規表現が「続かない」ことを指定し、かつ実際にヒットして欲しいのは前方部分だけにしたい場合には、[前方一致指定]を使用します。

前方一致指定とは反対に、前方部分が特定のパターンにヒットしないことを必要とします。例えば「xyz」の前が「abc」でない場合に「xyz」のみにヒットさせたいようなケースで使います。

上記例では、(?<!abc)xyzと指定します。

文字列
第一編
第二編
この編
第一編
第二編
あの編
検索する文字列
某編という文字列を指定し、その中からが含まれる第某編を除外したを選択。)
メタ文字:(?<!第.)編
置換する文字列
置換結果
第一編
第二編
この◆
第一編
第二編
あの◆

注意事項

前方一致・前方不一致指定は、正規表現文字列の先頭に書く必要があります。

また、前方一致・前方不一致指定の表記自体をカッコで囲んだり|などと組み合わせることはできません。

そのような指定をすると間違った結果になりますので、注意しましょう。

「ものぐさ」指定

通常、秀丸の正規表現で[+(プラス記号)][*(アスタリスク)][?(クエスチョン)][{n,m}(範囲を指定した繰り返し)]を使用した場合、その正規表現にマッチする最も長い文字列にヒットするはずです。これを「最長一致の原則」と呼びます(例えば「abcabca」という文字列に対し正規表現で「a*」と指定すると、メタ文字にマッチする最も長い文字列「abcabca」がヒットします)。

これに対して、その正規表現にマッチする最も短い文字列にヒットさせるようにする機能が「最短一致の原則」と呼ばれ、秀丸では「ものぐさ指定」として実装されています。「ものぐさ指定」をするには、メタ文字の直後に「?」を入力してください。

ものぐさ指定をした場合は、逆に、もっとも短い文字列にヒットしようとします(上記の例の場合、「ものぐさ指定」でメタ文字を「a*?」と指定すると、「abca」がヒットします)。

また、正規表現のマッチング処理自体も、ものぐさ指定した方が動作速度が速くなる可能性が高いです。

例えば、以下のような文字列があったとします。

生憎<あいにくと読む>今日は雨です<困った>。
しかし<今日は>出かける<どこへ?>必要があります。

この文章の<>内の文字列を表現する正規表現を考えてみましょう。

最長一致の原則にもとづく正規表現の検索式は<[^>]+>になるはずです。

この正規表現は、<>の中に一文字以上の文字列。但し>は除く。という意味になります。

これはこれで有効なのですが、この検索式を考えつくのが結構面倒だったりします。

「単純に<と>だけで表現できればなあ~」というような場合に利用するのが「ものぐさ指定」です。

「ものぐさ」指定による同様の正規表現の検索式は<.*?>になります。

「ものぐさ」を表す?がポイントになります。