これらの関数は正規表現を操作します。
この関数は、唯一の完全一致が string となる正規表現を返します。この正規表現を looking-at で使用する場合、バッファ内の次の文字が string である場合にのみ成功します。検索関数で使用する場合、検索対象のテキストに string が含まれている場合に成功します。正規表現による検索を参照してください。
これにより、正規表現を必要とする関数を呼び出す際に、完全一致や検索を指定できるようになります。
(regexp-quote "^The cat$")
⇒ "\\^The cat\\$"
regexp-quote
の用途の一つに、厳密な文字列一致と正規表現で記述されたコンテキストを組み合わせるというものがあります。例えば、これは string の値であり、かつ前後が空白文字で囲まれた文字列を検索します:
(re-search-forward (concat "\\s-" (regexp-quote string) "\\s-"))
返される文字列に特殊文字が含まれていない場合、string そのものになることがあります。
この関数は、リスト strings に含まれるいずれかの文字列にマッチする効率的な正規表現を返します。これは、マッチングや検索を可能な限り高速化したい場合に有用です—例えば、Font Lock モード31 などです。
strings が空リストの場合、戻り値は何もマッチしない正規表現となります。
オプション引数 paren には、以下のいずれかを指定できます。
生成される正規表現の前には paren が、後には ‘\)’ が付きます。例えば、明示的に番号を振ったグループを作成するには ‘"\\(?1:"’ を使用します。
words生成された正規表現は、‘\<\(’と‘\)\>’で囲まれています。
symbols生成される正規表現は、‘\_<\(’と‘\)\_>’で囲まれます(これは、プログラミング言語のキーワードなどをマッチさせる際に適切なことが多いです)。
nil生成された正規表現は、‘\(’と‘\)’で囲まれています。
nil後続の接尾辞演算子が式全体に適用されることを確実にする必要がある場合、生成される正規表現は ‘\(?:’ と ‘\)’ で囲まれます。
返される正規表現は、常に可能な限り長い文字列にマッチするように順序付けられています。
並べ替え前であれば、regexp-opt
から得られる正規表現は、簡略化したバージョンのものと等価でありながら、通常はより効率的です:
(defun simplified-regexp-opt (strings &optional paren)
(let ((parens
(cond
((stringp paren) (cons paren "\\)"))
((eq paren 'words) '("\\<\\(" . "\\)\\>"))
((eq paren 'symbols) '("\\_<\\(" . "\\)\\_>"))
((null paren) '("\\(?:" . "\\)"))
(t '("\\(" . "\\)")))))
(concat (car parens)
(mapconcat 'regexp-quote strings "\\|")
(cdr parens))))
この関数は、regexp に含まれるグループ化構文(括弧で囲まれた式)の総数を返します。これにはシャイグループは含まれません(正規表現におけるバックスラッシュ構文を参照してください)。
この関数は、文字リスト chars に含まれる文字にマッチする正規表現を返します。
(regexp-opt-charset '(?a ?b ?c ?d ?e))
⇒ "[a-e]"
この変数には、いかなる文字列にも決してマッチしないことが保証された正規表現が格納されています。実際に何かにマッチするパターンが設定される可能性のある変数のデフォルト値として、特に有用です。
なお、regexp-opt
であっても、その結果が絶対的に最も効率的な形式であるとは限りません。手作業で調整した正規表現の方がわずかに効率的な場合もありますが、わざわざ手間をかける価値があることはほとんどありません。