rx 正規表現における構文 ¶rx 正規表現における各種形式について以下に説明します。短縮表記の rx は、任意の rx 形式を表します。rx… は 0 個以上の rx
形式を意味し、特に断りのない限り、これらの形式を (seq …)
サブフォームでラップしたかのように順次照合します。
これらはすべて rx
マクロに対する有効な引数です。すべての形式は記述されたセマンティクスによって定義されており、対応する文字列正規表現は理解を助ける目的でのみ提供されています。A、B、…
は、その中の(適切に括弧で囲まれた)文字列正規表現の部分式を表します。
"some-string"文字列 ‘some-string’ をそのまま照合します。文字列正規表現とは異なり、特別な意味を持つ文字はありません。
?C文字「C」をそのまま照合してください。
(seq rx…) ¶(sequence rx…)(: rx…)(and rx…)rx を順にマッチさせます。引数がない場合、この式は空文字列にマッチします。
対応する文字列正規表現: ‘AB…’(部分式が連続)。
(or rx…) ¶(| rx…)rx のうちちょうど1つにマッチします。すべての引数が文字列、文字、または同様に制約された or
形式である場合、常に可能な限り長いマッチが使用されます。それ以外の場合は、最長のマッチか、最初(左から右の順)のマッチのいずれかが使用されます。引数がない場合、この式は何もマッチしません。
対応する文字列正規表現: ‘A\|B\|…’.
unmatchable ¶いかなるマッチも拒否します。(or)と同等です。regexp-unmatchableを参照してください。
通常、繰り返し構文は貪欲であり、可能な限り多くマッチしようとします。一部の構文は非貪欲であり、可能な限り少なくマッチしようとします(非貪欲な繰り返しを参照)。
(zero-or-more rx…) ¶(0+ rx…)rxに0回以上マッチします。デフォルトでは貪欲にマッチします。
対応する文字列正規表現: ‘A*’ (貪欲), ‘A*?’ (非貪欲)
(one-or-more rx…) ¶(1+ rx…)rxに1回以上マッチします。デフォルトでは貪欲にマッチします。
対応する文字列正規表現: ‘A+’ (貪欲), ‘A+?’ (非貪欲)
(zero-or-one rx…) ¶(optional rx…)(opt rx…)rx に1回マッチさせるか、空文字列にマッチさせる。デフォルトでは貪欲にマッチする。
対応する文字列正規表現: ‘A?’ (貪欲), ‘A??’ (非貪欲).
(* rx…) ¶rxに0回以上マッチする。貪欲。
対応する文字列正規表現: ‘A*’
(+ rx…) ¶rxに1回以上マッチする。貪欲。
対応する文字列正規表現: ‘A+’
(? rx…) ¶rx に1回マッチさせるか、空文字列にマッチさせる。貪欲。
対応する文字列正規表現: ‘A?’
(*? rx…) ¶rxに0回以上マッチします。非貪欲です。
対応する文字列正規表現: ‘A*?’
(+? rx…) ¶rxに1回以上マッチする。非貪欲。
対応する文字列正規表現: ‘A+?’
(?? rx…) ¶rx または空文字列にマッチします。非貪欲です。
対応する文字列正規表現: ‘A??’
(= n rx…)(repeat n rx)rxにちょうどn回マッチしてください。
対応する文字列正規表現: ‘A\{n\}’
(>= n rx…) ¶rxにn回以上マッチさせる。貪欲。
対応する文字列正規表現: ‘A\{n,\}’
(** n m rx…) ¶(repeat n m
rx…)rxに少なくともn回、最大でm回マッチさせる。貪欲法。
対応する文字列正規表現: ‘A\{n,m\}’
一部の繰り返し形式における貪欲性は、以下の構文を用いて制御できます。ただし、このようなマッチングが必要な場合は、通常、前述の明示的な非貪欲形式を使用する方が適切です。
(minimal-match rx)
¶非貪欲マッチングを用いて、rx を zero-or-more、0+、one-or-more、1+、zero-or-one、opt および optional と照合します。
(maximal-match rx)
¶貪欲マッチングを用いて、rx を zero-or-more、0+、one-or-more、1+、zero-or-one、opt、optional と照合します。これがデフォルトです。
(any set…) ¶(char set…)(in set…)set のいずれかに含まれる単一の文字にマッチします。各 set は、文字、その文字集合を表す文字列、範囲、または文字クラス(後述)のいずれかです。範囲は、"A-Z" のようなハイフン区切りの文字列か、(?A
. ?Z) のような文字のコンスのいずれかです。
なお、この構文における文字列では、ハイフン (-)
は範囲区切り文字として機能するため、特殊な扱いとなります。ハイフンを含める場合は、独立した文字として、あるいは1文字の文字列として追加してください。
対応する文字列正規表現: ‘[…]’
(not charspec) ¶charspec に含まれない文字に一致します。charspec には、文字、1文字の文字列、any、not、or、intersection、syntax または category 形式、あるいは文字クラスを指定できます。charspec が or 形式である場合、その引数には
intersection と同様の制約が適用されます。詳細は以下を参照してください。
対応する文字列正規表現: ‘[^…]’,
‘\Scode’,
‘\Ccode’
(intersection
charset…) ¶すべての charset に含まれる文字にマッチします。各 charset は、文字、1文字の文字列、文字クラスを含まない any 形式、または引数がいずれも charset である
intersection、or、not 形式のいずれかとなります。
not-newline, nonl ¶改行以外の任意の文字にマッチします。
対応する文字列正規表現: ‘.’ (ドット)
anychar, anything ¶任意の文字に一致。
対応する文字列正規表現:‘.\|\n’(例)
名前付きキャラクタークラスのキャラクターに一致:
alpha, alphabetic, letter英字にマッチします。より正確には、Unicodeの ‘general-category’ プロパティによって英字であることが示されている文字にマッチします。
alnum, alphanumeric英字および数字にマッチします。より正確には、Unicodeの ‘general-category’ プロパティによって、英字または10進数字であることが示されている文字にマッチします。
digit, numeric, num数字 ‘0’–‘9’ を対応させてください。
xdigit, hex-digit, hex16進数の桁 ‘0’–‘9’、‘A’–‘F’、および ‘a’–‘f’ を対応させてください。
cntrl, controlコードが0–31の範囲にある任意の文字にマッチします。
blank水平方向の空白文字にマッチします。より正確には、Unicodeの ‘general-category’ プロパティによって空白区切り文字であることが示されている文字にマッチします。
space, whitespace, white空白文字の構文を持つ任意の文字に一致します(構文クラス表を参照)。
lower, lower-case現在の大文字・小文字判定テーブルに基づいて、小文字に一致するものすべてにマッチします。case-fold-search が nil
以外の場合、大文字にもマッチします。
upper, upper-case現在の大文字・小文字判定テーブルに基づき、任意の大文字にマッチします。case-fold-search が nil
以外の場合、任意の小文字にもマッチします。
graph, graphic空白文字、ASCIIおよび非ASCII制御文字、サロゲート、およびUnicodeの‘general-category’プロパティで示されるUnicode未割り当てのコードポイントを除く任意の文字に一致します。
print, printing空白文字、または graph にマッチする文字に一致します。
punct, punctuation任意の句読点文字にマッチします。(現時点では、マルチバイト文字の場合、ワード構文に該当しないものすべてが対象となります。)
word, wordchar単語構文を持つ任意の文字に一致します(構文クラス表を参照)。
ascii任意のASCII文字(コード 0–127)にマッチします。
nonasciiASCII以外の任意の文字(ただし生バイトは除く)にマッチします。
クラス space、word、punct
は、現在のバッファの構文テーブルを使用しますが、上書きされる構文テキストプロパティは使用しません(構文プロパティを参照)。
対応する文字列正規表現: ‘[[: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 と同等ではありません。
対応する文字列正規表現: ‘\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 を実行してください。新しいカテゴリの定義方法については、カテゴリを参照してください。
対応する文字列正規表現: ‘\cchar’ (ここで char
はカテゴリ文字)。
これらはすべて空文字列に一致しますが、特定の箇所に限られます。
line-start, bol ¶行頭の一致。
対応する文字列正規表現: ‘^’
line-end,
eol ¶行末の一致。
対応する文字列正規表現: ‘$’
string-start, bos, buffer-start, bot
¶照合対象の文字列またはバッファの先頭での一致。
対応する文字列正規表現: ‘\`’
string-end, eos, buffer-end, eot ¶照合対象の文字列またはバッファの末尾でのマッチ。
対応する文字列正規表現: ‘\'’
point ¶ポイントでの試合。
対応する文字列正規表現: ‘\=’
word-start, bow ¶単語の先頭に一致。
対応する文字列正規表現: ‘\<’
word-end,
eow ¶単語末の一致。
対応する文字列正規表現: ‘\>’
word-boundary ¶単語の先頭または末尾に一致。
対応する文字列正規表現: ‘\b’
not-word-boundary ¶単語の先頭や末尾以外であれば、どこにマッチしてもよい。
対応する文字列正規表現: ‘\B’
symbol-start ¶記号の先頭での一致。
対応する文字列正規表現: ‘\_<’
symbol-end ¶記号の末尾での一致。
対応する文字列正規表現: ‘\_>’
(group rx…) ¶(submatch rx…)rx にマッチさせ、マッチしたテキストと位置をマッチデータで参照可能にします。正規表現の最初のグループは
1 番となり、それ以降のグループには、それまでのパターン内での最大番号のグループより 1 大きい番号が割り当てられます。
対応する文字列正規表現: ‘\(…\)’
(group-n
n rx…) ¶(submatch-n n rx…)groupと同様だが、グループ番号nを明示的に指定する。nは正でなければならない。
対応する文字列正規表現: ‘\(?n:…\)’
(backref n) ¶グループ番号 n で以前にマッチしたテキストに一致させます。n は 1–9 の範囲内である必要があります。
対応する文字列正規表現: ‘\n’