rx
によるregexpの構築 ¶rx
のregexpsにおける種々のフォームを以下で説明します。省略形式として使用するrxは任意のrxフォームを表します。rx…は0個以上のrxフォームを表し、特に明記しないかぎりこれらのフォームは(seq
…)
というサブフォームで括られているかのように順にマッチします。
以下はすべてrx
マクロにたいする有効な引数です。これらのフォームはすべて記述のされ方によって定義されます。それぞれに記述されている文字列regexpは、単に理解を容易にするために提供されています。(適切なカッコで括られた)A、B、…は、それらの部分式における文字列regexpを意味します。
"some-string"
文字列‘some-string’にリテラル(文字通り)にマッチする。文字列regexpsとは異なり特別な意味をもつ文字はない。
?C
文字‘C’にリテラルにマッチする。
(seq rx…)
¶(sequence rx…)
(: rx…)
(and rx…)
順にrxをマッチする。引数なしなら、その式は空文字列にマッチする。
対応する文字列regexpは‘AB…’
(シーケンス内の部分式)。
(or rx…)
¶(| rx…)
rxのうちのいずれか1つに正確にマッチする。すべての引数が文字列か文字、またはそのようなor
フォームなら、可能な最長マッチを常に使用する。それ以外なら最長のマッチ、または(L2R順で)最初のマッチのいずれかを使用する。引数なしなら、その式は何にもマッチすることはない。
対応する文字列regexpは‘A\|B\|…’。
unmatchable
¶すべてのマッチを拒絶する。(or)
と等価。regexp-unmatchableを参照のこと。
繰り返しフォームは通常は可能なかぎり多数回のマッチを試みるので欲張り(greedy)です。いくつかのフォームは可能なかぎり少数回のマッチを試みるので非欲張り(non-greedy)です(Non-greedy repetitionを参照)。
(zero-or-more rx…)
¶(0+ rx…)
rxに0回以上マッチする。デフォルトでは欲張り。
対応する文字列regexpは‘A*’
(欲張り)、‘A*?’ (非欲張り)。
(one-or-more rx…)
¶(1+ rx…)
rxに1回以上マッチする。デフォルトでは欲張り。
対応する文字列regexpは‘A+’
(欲張り)、‘A+?’ (非欲張り)。
(zero-or-one rx…)
¶(optional rx…)
(opt rx…)
rxに1回、または空文字列にマッチする。デフォルトでは欲張り。
対応する文字列regexpは‘A?’
(欲張り)、‘A??’ (非欲張り)。
(* rx…)
¶rxに0回以上マッチする。欲張り。
対応する文字列regexpは‘A*’。
(+ rx…)
¶rxに1回以上マッチする。欲張り。
対応する文字列regexpは‘A+’。
(? rx…)
¶rxに1回、または空文字列にマッチする。欲張り。
対応する文字列regexpは‘A?’。
(*? rx…)
¶rxに0回以上マッチする。非欲張り。
対応する文字列regexpは‘A*?’。
(+? rx…)
¶rxに1回以上マッチする。非欲張り。
対応する文字列regexpは‘A+?’。
(?? rx…)
¶rx、または空文字列にマッチする。非欲張り。
対応する文字列regexpは‘A??’。
(= n rx…)
(repeat n rx)
rxに正確にn回マッチする。
対応する文字列regexpは‘A\{n\}’。
(>= n rx…)
¶rxにn回以上マッチする。欲張り。
対応する文字列regexpは‘A\{n,\}’。
(** n m rx…)
¶(repeat n m rx…)
rxに少なくともn回、ただしm回を超えない回数マッチする。欲張り。
対応する文字列regexpは‘A\{n,m\}’。
いくつかの繰り返しフォームの欲張りの度合いは以下の構文を使用して制御できます。しかしそのようなマッチングが要求される際には、通常は上述した明示的な非欲張りフォームを使用するほうがよいでしょう。
(minimal-match rx)
¶非欲張りなマッチングを使用してzero-or-more
、0+
、one-or-more
、1+
、zero-or-one
、opt
、optional
によりrxをマッチする。
(maximal-match rx)
¶欲張りなマッチングを使用してzero-or-more
、0+
、one-or-more
、1+
、zero-or-one
、opt
、optional
によりrxをマッチする。これがデフォルト。
(any set…)
¶(char set…)
(in set…)
setのいずれかより1文字をマッチする。setはそれぞれ文字、それ自身が文字セットを表す文字列、範囲、または文字クラス(以下参照)。範囲は"A-Z"
のようにハイフンで区切られた文字列、または(?A
. ?Z)
のようなコンスセル。
この構文における文字列内のハイフン(-
)は範囲区切りとして振る舞うのでスペシャル。ハイフンを含めるには区切り文字か単一文字の文字列として追加する。
対応する文字列regexpは‘[…]’。
(not charspec)
¶charspecに含まれない文字にマッチする。charspecは文字、単一文字の文字列、フォームany
、not
、or
、intersection
、syntax
、category
、または文字クラス。charspecがor
フォームなら、その引数にはintersection
の引数と同じ制限がある。以下参照。
対応する文字列regexpは‘[^…]’、‘\Scode’、‘\Ccode’。
(intersection charset…)
¶charsetに含まれるすべての文字にマッチする。charsetはそれぞれ文字、単一文字の文字列、文字クラスなしのany
フォーム、または引数がcharsetであるようなintersection
、or
、not
フォーム。
not-newline
、nonl
¶改行を除くすべての文字にマッチする。
対応する文字列regexpは‘.’ (ドット)。
anychar
、anything
¶すべての文字にマッチする。
対応する文字列regexpはたとえば‘.\|\n’。
以下の名前つき文字クラスの文字にマッチする:
alpha
、alphabetic
、letter
アルファベット文字にマッチする。より正確には、Unicodeの‘general-category’プロパティがアルファベット文字であることを示すような文字にマッチする。
alnum
、alphanumeric
アルファベット文字と数字にマッチする。より正確には、Unicodeの‘general-category’プロパティがアルファベット文字か10進数字であることを示すような文字にマッチする。
digit
、numeric
、num
‘0’から‘9’の数字にマッチする。
xdigit
、hex-digit
、hex
‘0’から‘9’、‘A’から‘F’および‘a’から‘f’の16進数字にマッチする。
cntrl
、control
コードが0から31の範囲の任意の文字にマッチする。
blank
水平空白文字(horizontal whitespace)にマッチする。より正確には、Unicodeの‘general-category’プロパティがスペース区切り文字(spacing separators)であることを示すような文字にマッチする。
space
、whitespace
、white
空白文字構文をもつすべての文字にマッチする(構文クラスのテーブルを参照)。
lower
、lower-case
カレントのcaseテーブルで小文字として判断されるすべての文字にマッチする。case-fold-search
が非nil
ならすべての大文字にもマッチする。
upper
、upper-case
カレントのcaseテーブルで大文字として判断されるすべての文字にマッチする。case-fold-search
が非nil
ならすべての小文字にもマッチする。
graph
、graphic
Unicodeの‘general-category’プロパティで示されるような空白文字、ASCIIと非ASCIIの制御文字、サロゲートコードポイント、Unicodeで未割り当てのコードポイントを除くすべての文字にマッチする。
print
、printing
空白文字かgraph
にマッチする文字にマッチする。
punct
、punctuation
任意の句読点文字(punctuation character)にマッチする(現在のところマルチバイト文字では非単語構文のすべてにマッチする)。
word
、wordchar
単語構文(構文クラスのテーブルを参照)をもつ任意の文字にマッチする。
ascii
任意のASCII文字(コード0から127)にマッチする。
nonascii
非ASCII文字(ただしrawバイト以外)にマッチする。
space
、word
、punct
はカレントバッファーの構文テーブルを使用するクラスですが、オーバーライドする構文のテキストプロパティには使用しない(構文プロパティを参照)。
対応する文字列regexp: ‘[[:class:]]’
(syntax syntax)
¶以下の名前のいずれかの構文syntaxの文字にマッチする。
構文名 | 構文文字 |
---|---|
whitespace | - |
punctuation | . |
word | w |
symbol | _ |
open-parenthesis | ( |
close-parenthesis | ) |
expression-prefix | ' |
string-quote | " |
paired-delimiter | $ |
escape | \ |
character-quote | / |
comment-start | < |
comment-end | > |
string-delimiter | | |
comment-delimiter | ! |
詳細は構文クラスのテーブルを参照のこと。(syntax
punctuation)
は文字クラスpunctuation
と等価ではないことに注意してほしい。
対応する文字列regexpは‘\schar’
(charは構文文字)。
(category category)
¶以下のカテゴリー名かカテゴリー文字のいずれかであるようなカテゴリーcategoryの文字にマッチする.
カテゴリー名 | カテゴリー文字 |
---|---|
space-for-indent | スペース |
base | . |
consonant | 0 |
base-vowel | 1 |
upper-diacritical-mark | 2 |
lower-diacritical-mark | 3 |
tone-mark | 4 |
symbol | 5 |
digit | 6 |
vowel-modifying-diacritical-mark | 7 |
vowel-sign | 8 |
semivowel-lower | 9 |
not-at-end-of-line | < |
not-at-beginning-of-line | > |
alpha-numeric-two-byte | A |
chinese-two-byte | C |
greek-two-byte | G |
japanese-hiragana-two-byte | H |
indian-two-byte | I |
japanese-katakana-two-byte | K |
strong-left-to-right | L |
korean-hangul-two-byte | N |
strong-right-to-left | R |
cyrillic-two-byte | Y |
combining-diacritic | ^ |
ascii | a |
arabic | b |
chinese | c |
ethiopic | e |
greek | g |
korean | h |
indian | i |
japanese | j |
japanese-katakana | k |
latin | l |
lao | o |
tibetan | q |
japanese-roman | r |
thai | t |
vietnamese | v |
hebrew | w |
cyrillic | y |
can-break | | |
カレントで定義されているカテゴリーに関する情報は、コマンドM-x describe-categories
RETを実行する。新たなカテゴリーを定義する方法についてはカテゴリーを参照のこと。
対応する文字列regexpは‘\cchar’
(charはカテゴリー文字)。
これらはすべて空文字列、ただし特定箇所箇所だけにマッチします。
line-start
、bol
¶行の先頭にマッチする。
対応する文字列regexpは‘^’。
line-end
、eol
¶行の終端にマッチする。
対応する文字列regexpは‘$’。
string-start
、bos
、buffer-start
、bot
¶マッチする文字列かバッファーの先頭にマッチする。
対応する文字列regexpは‘\`’。
string-end
、eos
、buffer-end
、eot
¶マッチする文字列かバッファーの終端にマッチする。
対応する文字列regexpは‘\'’。
point
¶ポイントにマッチする。
対応する文字列regexpは‘\=’。
word-start
、bow
¶単語の先頭にマッチする。
対応する文字列regexpは‘\<’。
word-end
、eow
¶単語の終端にマッチする。
対応する文字列regexpは‘\>’。
word-boundary
¶単語の先頭か終端にマッチする。
対応する文字列regexpは‘\b’。
not-word-boundary
¶単語の先頭と終端以外のすべての箇所にマッチする。
対応する文字列regexpは‘\B’。
symbol-start
¶シンボルの先頭にマッチする。
対応する文字列regexpは‘\_<’。
symbol-end
¶シンボルの終端にマッチする。
対応する文字列regexpは‘\_>’。
(group rx…)
¶(submatch rx…)
マッチデータ内でマッチしたテキストと位置にアクセスできるようにrxをマッチする。regexpの1つ目のグループは番号1、それ以降のグループはパターン内でそれ以前に最大の番号が付与されたグループより1つ大きい番号が付与される。
対応する文字列regexpは‘\(…\)’。
(group-n n rx…)
¶(submatch-n n rx…)
group
と同様だがグループ番号nを明示的に割り当てる。nは正でなければならない。
対応する文字列regexpは‘\(?n:…\)’。
(backref n)
¶前にグループ番号nでマッチされたテキストにマッチする。nは1から9の範囲になければならない。
対応する文字列regexpは‘\n’。