rx
構造化Rgexp表記 ¶文字ベースの構文にたいする代替えとして、EmacsはLispのS式にもとづく構造化されたrx
表記を提供します。この表記により通常はregexp文字列をより簡単に読解、記述、保守することができ、自由にインデントしてコメントを記述できます。regexp関数が期待するのは文字列形式なので変換が必要になりますが、この変換はregexpを使用するLispコードの実行時ではなく、通常はバイトコンパイルの間に行われます。
以下はCプログラム言語のブロックコメントにマッチするrx
のregexpです27。
(rx "/*" ; 始まりの/* (zero-or-more (or (not "*") ; 非* (seq "*" ; または (not "/")))) ; /が後置されていない* (one-or-more "*") ; 少なくとも1つの* "/") ; と終わりの/
短いシノニムを使用してより簡潔に記述すると、
(rx "/*" (* (| (not "*") (: "*" (not "/")))) (+ "*") "/")
従来の文字列構文では以下のような記述になります
"/\\*\\(?:[^*]\\|\\*[^/]\\)*\\*+/"
rx
表記は主にLispコード内で有用です。query-replace-regexp
の実行時や変数のカスタマイゼーションのように、regexpが要求されるインタラクティブな状況下では使用することができません。