Next: Rx Functions, Up: Rx Notation [Contents][Index]
rx
によるregexpの構築rx
のregexpsにおける種々のフォームを以下で説明します。省略形式として使用するrxは任意のrxフォームを表し、rx…は0個以上の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
空白文字構文をもつすべての文字にマッチする(Syntax Class Tableを参照)。
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
単語構文(Syntax Class Tableを参照)をもつ任意の文字にマッチする。
ascii
任意のASCII文字(コード0から127)にマッチする。
nonascii
非ASCII文字(ただしrawバイト以外)にマッチする。
対応する文字列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 Class Tableを参照のこと。(syntax
punctuation)
は文字クラスpunctuation
と等価ではないことに注意してほしい。
対応する文字列regexpは‘\scode’。
(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を実行する。新たなカテゴリーを定義する方法についてはCategoriesを参照のこと。
対応する文字列regexpは‘\ccode’。
これらはすべて空文字列、ただし特定箇所箇所だけにマッチします。
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’。
(literal expr)
Lisp式exprを評価した結果であるリテラル文字列とマッチする。評価はカレントのレキシカル環境で呼び出し時に行われる。
(regexp expr)
(regex expr)
Lisp式exprを評価した結果であるregexpとマッチする。評価はカレントのレキシカル環境で呼び出し時に行われる。
(eval expr)
Lisp式exprを評価した結果であるrxとマッチする。評価はrx-to-string
呼び出しの際のマクロ展開時に、カレントのグローバル環境で行われる。
Next: Rx Functions, Up: Rx Notation [Contents][Index]