rx 正则表达式中的构造 ¶下面描述了 rx 正则表达式中的各种形式。
简写的 rx 代表任意 rx 形式。rx…
表示零个或多个 rx 形式,除非另有说明,
它们将按顺序匹配,仿佛被包裹在 (seq …)
子形式中。
这些都是 rx 宏的有效参数。所有形式均
由其描述的语义定义;相应的字符串正则表达式仅用于便于理解。
A、B、… 表示其中(适当括号括起的)字符串正则表达式子表达式。
"some-string"字面匹配字符串 ‘some-string’。 与字符串正则表达式不同,此处没有字符具有特殊含义。
?C字面匹配字符 ‘C’。
(seq rx…) ¶(sequence rx…)(: rx…)(and rx…)按顺序匹配 rx。无参数时,该表达式匹配空字符串。
对应的字符串正则表达式:‘AB…’
(按顺序的子表达式)。
(or rx…) ¶(| rx…)恰好匹配其中一个 rx。
若所有参数均为字符串、字符或受约束的 or 形式,
则始终使用最长可能的匹配。
否则,将使用最长匹配或
第一个(从左到右顺序)匹配。
无参数时,该表达式完全不匹配任何内容。
对应的字符串正则表达式:‘A\|B\|…’。
unmatchable ¶拒绝任何匹配。等效于 (or)。
See regexp-unmatchable。
通常,重复形式是贪婪的,即它们尝试尽可能多次地匹配。 某些形式是非贪婪的;它们尝试尽可能少地匹配(see Non-greedy repetition)。
(zero-or-more rx…) ¶(0+ rx…)匹配 rx 零次或多次。默认为贪婪模式。
对应的字符串正则表达式:‘A*’(贪婪),
‘A*?’(非贪婪)
(one-or-more rx…) ¶(1+ rx…)匹配 rx 一次或多次。默认为贪婪模式。
对应的字符串正则表达式:‘A+’(贪婪),
‘A+?’(非贪婪)
(zero-or-one rx…) ¶(optional rx…)(opt rx…)匹配 rx 一次或空字符串。默认为贪婪模式。
对应的字符串正则表达式:‘A?’(贪婪),
‘A??’(非贪婪)。
(* rx…) ¶匹配 rx 零次或多次。贪婪模式。
对应的字符串正则表达式:‘A*’
(+ rx…) ¶匹配 rx 一次或多次。贪婪模式。
对应的字符串正则表达式:‘A+’
(? rx…) ¶匹配 rx 一次或空字符串。贪婪模式。
对应的字符串正则表达式:‘A?’
(*? rx…) ¶匹配 rx 零次或多次。非贪婪模式。
对应的字符串正则表达式:‘A*?’
(+? rx…) ¶匹配 rx 一次或多次。非贪婪模式。
对应的字符串正则表达式:‘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)
这样的字符对。
请注意,在此类构造的字符串中,连字符 (-) 具有特殊含义,
因为它充当范围分隔符。要包含连字符,请将其作为单独的字符或单字符字符串添加。
对应的字符串正则表达式:‘[…]’
(not charspec) ¶匹配不包含在 charspec 中的字符。charspec 可以是
一个字符、单字符字符串、any、not、
or、intersection、syntax 或 category 形式,
或一个字符类。
若 charspec 是 or 形式,其参数与 intersection 的参数受相同限制(见下文)。
对应的字符串正则表达式:‘[^…]’、‘\Scode’、
‘\Ccode’
(intersection charset…) ¶匹配包含在所有 charset 中的字符。
每个 charset 可以是一个字符、单字符字符串、
不含字符类的 any 形式,或其参数也为 charset 的
intersection、or 或 not 形式。
not-newline, nonl ¶匹配除换行符之外的任何字符。
对应的字符串正则表达式:‘.’(点)
anychar, anything ¶匹配任何字符。
对应的字符串正则表达式:例如 ‘.\|\n’
匹配命名字符类中的字符:
alpha、alphabetic、letter匹配字母字符。更准确地说,匹配其 Unicode ‘general-category’ 属性表明为字母的字符。
alnum、alphanumeric匹配字母字符和数字。更准确地说,匹配其 Unicode ‘general-category’ 属性表明为字母或十进制数字的字符。
digit、numeric、num匹配数字 ‘0’–‘9’。
xdigit、hex-digit、hex匹配十六进制数字 ‘0’–‘9’、‘A’–‘F’ 和 ‘a’–‘f’。
cntrl、control匹配任何代码在 0–31 范围内的字符。
blank匹配水平空白符。更准确地说,匹配其 Unicode ‘general-category’ 属性表明为分隔符的字符。
space、whitespace、white匹配任何具有空白语法的字符(see 语法类别表)。
lower、lower-case匹配由当前大小写表确定的任何小写字符。
若 case-fold-search 为非 nil,这也会匹配任何大写字母。
upper、upper-case匹配由当前大小写表确定的任何大写字符。
若 case-fold-search 为非 nil,这也会匹配任何小写字母。
graph、graphic匹配除空白符、ASCII 和非 ASCII 控制字符、 代理项以及 Unicode 未分配的码点之外的任何字符,如 Unicode ‘general-category’ 属性所示。
print、printing匹配空白符或被 graph 匹配的字符。
punct、punctuation匹配任何标点字符。(目前,对于多字节字符,指任何具有非单词语法的字符。)
word、wordchar匹配任何具有单词语法的字符(see 语法类别表)。
ascii匹配任何 ASCII 字符(代码 0–127)。
nonascii匹配任何非 ASCII 字符(但不包含原始字节)。
类 space、word 和 punct 使用当前缓冲区的语法表,
而不是任何覆盖的语法文本属性(see 语法属性)。
对应的字符串正则表达式:‘[[:class:]]’
(syntax 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 | ! |
详情请见 see 语法类别表。
请注意,(syntax punctuation) 不等效于字符类
punctuation。
对应的字符串正则表达式:‘\schar’,其中 char 是语法字符。
(category category) ¶匹配类别 category 中的字符,category 可以是以下名称之一或其类别字符。
| 类别名称 | 类别字符 |
|---|---|
space-for-indent | space |
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。关于如何定义
新类别,参见 see 分类。
对应的字符串正则表达式:‘\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’