Previous: Regexp Example, Up: Regular Expressions [Contents][Index]
以下の関数は正規表現を扱います。
この関数は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-"))
この関数はリストstringsの文字列だけにマッチする効果的な正規表現をリターンする。これはマッチングや検索を可能な限り高速にする必要があるとき、たとえばFont Lockモードで有用である17。
オプション引数parenには以下のいずれかを指定できる:
結果となるregexpの前にparen、後に‘\)’が付加される。たとえば‘"\\(?1:"’を使用すると番号付きのグループを明示的に生成する。
words
結果となるregexpは‘\<\(’と‘\)\>’で括られる。
symbols
結果となるregexpは‘\_<\(’と‘\)\_>’で括られる(これはプログラミング言語のキーワードの類のマッチング時にしばしば適している)。
nil
結果となるregexpは‘\\(’と‘\\)’で括られる。
nil
後に付加する後置演算子が式全体に適用されるために必要なら、結果となるregexpは‘\(?:’と‘\)’で括られる。
regexp-opt
の結果regexpはその単純化されたバージョンと等価だが、通常はより効果的である。
(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 paren) (mapconcat 'regexp-quote strings "\\|") (cdr paren))))
この関数はregexp内のグループ化された構成要素(カッコで囲まれた正規表現)の総数をリターンする。これには内気なグループは含まれない(Regexp Backslashを参照)。
この関数は文字リストchars内の文字にマッチする正規表現をリターンする。
(regexp-opt-charset '(?a ?b ?c ?d ?e)) ⇒ "[a-e]"
regexp-opt
の結果が絶対的にもっとも効率的であるという保証はないことに注意してください。手作業でチューニングした正規表現のほうがわずかに効率的なこともありますが、これに努力する価値はほとんどないでしょう。