温馨提醒:系统正在全面升级。您可以访问最新站点。谢谢!
附录
正则表达式
sprintf 格式 正则表达式
后向引用
字符簇
下面是 ruby 支持的正则表达式符号(元字符)一览表。
不带 \ 的字母和数字不是元字符
带 \ 的符号不是元字符
有如此规则。
^
行首。匹配输入字符串头部或换行符之后的位置。
$
行尾。匹配输入字符串尾部或换行符之前的位置。
p "\n".gsub(/$/, "o") # => "o\no"
.
匹配除换行符之外的任何单个字符(多字节字符的话就不是一个字节而是一个字符)。使用正则表达式选项 m(多行模式。参考正则表达式字面值),则可以匹配含有换行符在内的任意单个字符。
p /./e =~ " あ "[0,1] # => nil
\w
匹配包括下划线的任何字母数字字符。等同于[0-9A-Za-z_]。
中文的全角字符也匹配。
\W
匹配任何非字母数字字符。\w 以外的字符。
\s
匹配任何空字符,包括空格、制表符、换页符等等。等同于[ \t\n\r\f\v]。
\S
匹配任何非空字符。[ \t\n\r\f\v]以外的字符。
\d
匹配一个数字字符。等同于[0-9]。
\D
匹配一个非数字字符。
\A
匹配字符串头部。和 ^ 不同,换行对其无影响。
\Z
匹配字符串尾部。字符串以换行结束的话则匹配换行之前的位置。
p "\n".gsub(/\Z/, "o") # => "o\no"
\z
匹配字符串尾部。与 $ 和 \Z 不同的是换行对其无影响。
\b
匹配字符类指定的单词边界(匹配 \w 和 \W 之间),也就是指单词和空格间的位置。字符类指定为退格符(0x08)。例如,'er\b' 可以匹配 "never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx
匹配由 x 指明的控制字符。例如,\cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f
匹配一个换页符。等同于 \x0c 和 \cL。
\n
匹配一个换行符。等同于 \x0a 和 \cJ。
\r
匹配一个回车符。等同于 \x0d 和 \cM。
\t
匹配一个制表符。等同于 \x09 和 \cI。
\v
匹配一个垂直制表符。等同于 \x0b 和 \cK。
\xn
匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等同于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。
\num
匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
\n
标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm
标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml
如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un
匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (?)。
\G
在上次成功匹配的地方(之后)进行匹配(不留间隔)。只有在首次使用时才会匹配到头部(与 \A 相同)。
可以在 scan 和 gsub 中使用。当您想在上次匹配的地方之后再进行匹配的话,可以使用。
# 从头取出 3 位数字(数字必须相连)。
str = "123456 789"
str.scan(/\G\d\d\d/) {|m| p m }
[ ]
指定字符簇。请参考字符簇。
*
匹配前面的子表达式零次或多次。尽可能匹配较长的部分。例如,zo* 能匹配 "z" 以及 "zoo"。* 等同于{0,}。
*?
负责指定数量(quantifiers)。表示前面子表达式至少出现零次(尽量匹配短的部分)。
+
负责指定数量(quantifiers)。表示前面子表达式至少出现 1 次
+?
负责指定数量(quantifiers)。表示前面子表达式至少出现 1 次(尽量匹配短的部分)。
{m}
{m,}
{m,n}
指定子表达式重复出现的次数(interval quantifier)。分别表示前面子表达式重复出现
m 次
至少 m 次
至少 m 次,至多 n 次
{,n} 或 {,} 将导致匹配失败。
str = "foofoofoo"
p str[/(foo){1}/] # => "foo"
p str[/(foo){2,}/] # => "foofoofoo"
p str[/(foo){1,2}/] # => "foofoo"
正则表达式 ?、*、+ 分别等同于 {0,1}、{0,}、{1,}。
{m}?
{m,}?
{m,n}?
指定子表达式重复出现的次数(interval quantifier)。分别表示前面子表达式重复出现
m 次
至少 m 次
m 回以上、最大 n 回