GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Example.html ・ emacs-doc.conao3.com

35.3.2 複雑な正規表現の例

以下は、かつてEmacsが文末とそれに続く任意の空白を認識するために使用していた複雑な正規表現です。(現在では、Emacsは関数 sentence-end によって構築された、類似しつつもより複雑なデフォルトの正規表現を使用しています。編集で使用される標準正規表現を参照してください。)

以下では、まずLisp構文の文字列として正規表現を示し(スペースとタブ文字を区別するため)、次にそれを評価した結果を示します。文字列定数はダブルクォートで始まり、ダブルクォートで終わります。‘\"’は文字列の一部としてのダブルクォートを、‘\\’は文字列の一部としてのバックスラッシュを、‘\t’はタブを、そして‘\n’は改行をそれぞれ表します。

"[.?!][]\"')}]*\\($\\| $\\|\t\\|  \\)[ \t\n]*"
     ⇒ "[.?!][]\"')}]*\\($\\| $\\|  \\|  \\)[
]*"

出力では、タブと改行がそのまま表示されます。

この正規表現は4つの部分が連続しており、次のように読み解くことができます。

[.?!]

パターンの前半部分は、ピリオド、疑問符、感嘆符の3文字のいずれかにマッチする括弧式です。マッチはこれら3文字のいずれかで始まる必要があります。(この点が、Emacsで採用されている新しいデフォルトの正規表現が旧来のものと異なる点の一つです。また、新しい仕様では、後続の空白文字なしに文を終わらせる一部の非ASCII文字も許容されます。)

[]\"')}]*

パターンの第2部分は、ピリオド、疑問符、または感嘆符の後に続く可能性のある、任意の数(0回以上)の閉じ中括弧および引用符にマッチします。\"は、文字列内のダブルクォートを表すLisp構文です。末尾の‘*’は、直前の正規表現(この場合は括弧式)が0回以上繰り返され得ることを示しています。

\\($\\| $\\|\t\\|  \\)

パターンの第3部分は、文末に続く空白(行末(任意でスペースあり)、タブ、または2つのスペース)にマッチします。ダブルバックスラッシュは、括弧と垂直バーを正規表現の構文として示しています。括弧はグループを区切り、垂直バーは選択肢を区切ります。ドル記号は行末にマッチさせるために使用されます。

[ \t\n]*

最後に、パターンの最後の部分は、文を終わらせるのに必要な最小限の空白を超える、追加のあらゆる空白にマッチします。

rx 表記(rx 構造化正規表現表記を参照)では、正規表現は次のように記述できます。

(rx (any ".?!")                    ; Punctuation ending sentence.
    (zero-or-more (any "\"')]}"))  ; Closing quotes or brackets.
    (or line-end
        (seq " " line-end)
        "\t"
        "  ")                      ; Two spaces.
    (zero-or-more (any "\t\n ")))  ; Optional extra whitespace.

rx 正規表現は単なる S-式であるため、同様に書式設定やコメントを付けることができます。