Previous: , Up: Regular Expressions   [Contents][Index]


33.3.3 正規表現の関数

以下の関数は正規表現を扱います。

Function: regexp-quote string

この関数はstringだけに正確にマッチするような正規表現をリターンする。looking-at内でこの正規表現を使用すると、そのバッファー内の次の文字がstringのときだけ成功するだろう。検索関数でのこの正規表現の使用は、検索されるテキストがstringを含むなら成功するだろう。Regexp Searchを参照のこと。

これにより、その正規表現を求める関数呼び出し時に正確な文字列マッチや検索を要求できる。

(regexp-quote "^The cat$")
     ⇒ "\\^The cat\\$"

正規表現として記述されたコンテキストにおいて、正確な文字列マッチを結合することがregexp-quoteの1つの使い方である。たとえば以下は空白文で囲まれたstringの値であるような文字列を検索する:

(re-search-forward
 (concat "\\s-" (regexp-quote string) "\\s-"))
Function: regexp-opt strings &optional paren

この関数はリストstringsの文字列だけにマッチする効果的な正規表現をリターンする。これはマッチングや検索を可能な限り高速にする必要があるとき、たとえばFont Lockモードで有用である17

オプション引数parenが非nilなら、その正規表現は少なくとも1つのカッコによるグループ化構成要素に常に囲まれてリターンされる。parenwordsなら、その構成要素は追加で‘\<’と‘\>’で囲まれ、parensymbolsなら‘\_<’と‘\_>’で囲まれる(プログラミング言語のような文字列をマッチングする際は、symbolsが適切な場合が多々ある)。

この単純化されたregexp-optの定義は、実際の値と等価(だが同程度に効率的ではない)な正規表現を生成する:

(defun regexp-opt (strings &optional paren)
  (let ((open-paren (if paren "\\(" ""))
        (close-paren (if paren "\\)" "")))
    (concat open-paren
            (mapconcat 'regexp-quote strings "\\|")
            close-paren)))
Function: regexp-opt-depth regexp

この関数はregexp内のグループ化された構成要素(カッコで囲まれた正規表現)の総数をリターンする。これには内気なグループは含まれない(Regexp Backslashを参照)。

Function: regexp-opt-charset chars

この関数は文字リストchars内の文字にマッチする正規表現をリターンする。

(regexp-opt-charset '(?a ?b ?c ?d ?e))
     ⇒ "[a-e]"

Footnotes

(17)

regexp-optの結果が絶対的にもっとも効率的であるという保証はないことに注意してください。手作業でチューニングした正規表現のほうがわずかに効率的なこともありますが、これに努力する価値はほとんどないでしょう。