Next: , Up: rx構造化Rgexp表記   [Contents][Index]


35.3.3.1 rxによるregexpの構築

rxのregexpsにおける種々のフォームを以下で説明します。省略形式として使用するrxは任意のrxフォームを表し、rx…は0個以上のrxフォームを意味します。これらはすべてrxマクロにたいして有効な引数です。対応する文字列regexp構文が与えられていればAB、…は文字列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…)

rxn回以上マッチする。欲張り。
対応する文字列regexpは‘A\{n,\}’。

(** n m rx…)
(repeat n m rx…)

rxに少なくともn回、ただしm回を超えない回数マッチする。欲張り。
対応する文字列regexpは‘A\{n,m\}’。

いくつかの繰り返しフォームの欲張りの度合いは以下の構文を使用して制御できます。しかしそのようなマッチングが要求される際には、通常は上述した明示的な非欲張りフォームを使用するほうがよいでしょう。

(minimal-match rx)

非欲張りなマッチングを使用してzero-or-more0+one-or-more1+zero-or-oneoptoptionalによりrxをマッチする。

(maximal-match rx)

欲張りなマッチングを使用してzero-or-more0+one-or-more1+zero-or-oneoptoptionalによりrxをマッチする。これがデフォルト。

単一文字のマッチ

(any set…)
(char set…)
(in set…)

setのいずれかより1文字をマッチする。setはそれぞれ文字、それ自身が文字セットを表す文字列、範囲、または文字クラス(以下参照)。範囲は"A-Z"のようにハイフンで区切られた文字列、または(?A . ?Z)のようなコンスセル。

この構文における文字列内のハイフン(-)は範囲区切りとして振る舞うのでスペシャル。ハイフンを含めるには区切り文字か単一文字の文字列として追加する。
対応する文字列regexpは‘[…]’。

(not charspec)

charspecに含まれない文字にマッチする。charspecは文字、単一文字の文字列、フォームanynotorintersectionsyntaxcategory、または文字クラス。charspecorフォームなら、その引数にはintersectionの引数と同じ制限がある。以下参照。
対応する文字列regexpは‘[^…]’、‘\Scode’、‘\Ccode’。

(intersection charset…)

charsetに含まれるすべての文字にマッチする。charsetはそれぞれ文字、単一文字の文字列、文字クラスなしのanyフォーム、または引数がcharsetであるようなintersectionornotフォーム。

not-newlinenonl

改行を除くすべての文字にマッチする。
対応する文字列regexpは‘.’ (ドット)。

anycharanything

すべての文字にマッチする。
対応する文字列regexpはたとえば‘.\|\n’。

文字クラス

以下の名前つき文字クラスの文字にマッチする:

alphaalphabeticletter

アルファベット文字にマッチする。より正確には、Unicodeの‘general-category’プロパティがアルファベット文字であることを示すような文字にマッチする。

alnumalphanumeric

アルファベット文字と数字にマッチする。より正確には、Unicodeの‘general-category’プロパティがアルファベット文字か10進数字であることを示すような文字にマッチする。

digitnumericnum

0’から‘9’の数字にマッチする。

xdigithex-digithex

0’から‘9’、‘A’から‘F’および‘a’から‘f’の16進数字にマッチする。

cntrlcontrol

コードが0から31の範囲の任意の文字にマッチする。

blank

水平空白文字(horizontal whitespace)にマッチする。より正確には、Unicodeの‘general-category’プロパティがスペース区切り文字(spacing separators)であることを示すような文字にマッチする。

spacewhitespacewhite

空白文字構文をもつすべての文字にマッチする(構文クラスのテーブルを参照)。

lowerlower-case

カレントのcaseテーブルで小文字として判断されるすべての文字にマッチする。case-fold-searchが非nilならすべての大文字にもマッチする。

upperupper-case

カレントのcaseテーブルで大文字として判断されるすべての文字にマッチする。case-fold-searchが非nilならすべての小文字にもマッチする。

graphgraphic

Unicodeの‘general-category’プロパティで示されるような空白文字、ASCIIと非ASCIIの制御文字、サロゲートコードポイント、Unicodeで未割り当てのコードポイントを除くすべての文字にマッチする。

printprinting

空白文字かgraphにマッチする文字にマッチする。

punctpunctuation

任意の句読点文字(punctuation character)にマッチする(現在のところマルチバイト文字では非単語構文のすべてにマッチする)。

wordwordchar

単語構文(構文クラスのテーブルを参照)をもつ任意の文字にマッチする。

ascii

任意のASCII文字(コード0から127)にマッチする。

nonascii

ASCII文字(ただしrawバイト以外)にマッチする。

対応する文字列regexpは‘[[:class:]]’。

(syntax syntax)

以下の名前のいずれかの構文syntaxの文字にマッチする。

構文名構文文字
whitespace-
punctuation.
wordw
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.
consonant0
base-vowel1
upper-diacritical-mark2
lower-diacritical-mark3
tone-mark4
symbol5
digit6
vowel-modifying-diacritical-mark7
vowel-sign8
semivowel-lower9
not-at-end-of-line<
not-at-beginning-of-line>
alpha-numeric-two-byteA
chinese-two-byteC
greek-two-byteG
japanese-hiragana-two-byteH
indian-two-byteI
japanese-katakana-two-byteK
strong-left-to-rightL
korean-hangul-two-byteN
strong-right-to-leftR
cyrillic-two-byteY
combining-diacritic^
asciia
arabicb
chinesec
ethiopice
greekg
koreanh
indiani
japanesej
japanese-katakanak
latinl
laoo
tibetanq
japanese-romanr
thait
vietnamesev
hebreww
cyrillicy
can-break|

カレントで定義されているカテゴリーに関する情報は、コマンドM-x describe-categories RETを実行する。新たなカテゴリーを定義する方法についてはカテゴリーを参照のこと。
対応する文字列regexpは‘\cchar’ (charはカテゴリー文字)。

0幅アサーション

これらはすべて空文字列、ただし特定箇所箇所だけにマッチします。

line-startbol

行の先頭にマッチする。
対応する文字列regexpは‘^’。

line-endeol

行の終端にマッチする。
対応する文字列regexpは‘$’。

string-startbosbuffer-startbot

マッチする文字列かバッファーの先頭にマッチする。
対応する文字列regexpは‘\`’。

string-endeosbuffer-endeot

マッチする文字列かバッファーの終端にマッチする。
対応する文字列regexpは‘\'’。

point

ポイントにマッチする。
対応する文字列regexpは‘\=’。

word-startbow

単語の先頭にマッチする。
対応する文字列regexpは‘\<’。

word-endeow

単語の終端にマッチする。
対応する文字列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のregexpを使用する関数とマクロ, Up: rx構造化Rgexp表記   [Contents][Index]