Ruby正则表达式

2009年5月2日星期六

Ruby正则表达式

有这么个规则:
不带\的数字和字母不是元字符
带\的符号也不是元字符
下文中出现的匹配多字节字符的正则表达式是指,通过使用$KCODE进行设定,或显式地使用汉字选项(请参考正则表达式字面值)等方式进行的匹配多字节字符的正则表达式。

^行首。与字符串的头部或换行符之后的位置相匹配。

$行尾。与字符串的尾部或换行符之前的位置相匹配。不包括换行符本身。ruby1.8特性:以前,只匹配字符串尾部换行符前的位置,现在则扩大到字符串的尾部。trap::Regexpp\n.gsub(/$/,o)
=o\n(1.6)
=o\no(1.8)

.匹配除换行符以外的任意一个字符。使用正则表达式选项m(多行模式。请参考正则表达式字面值)时,则匹配包括换行符在内的任意一个字符。在匹配多字节字符的正则表达式中,则匹配一个字(非单字节)。当遇到不完整的多字节字符的一部分(无法判断该字符是多字节字符?二进制?还是ASCII)时,也不会匹配。p/./e=~あ[0,1]#=nil

\w字母和数字。等同于[0-9A-Za-z]。若为匹配多字节字符的正则表达式时,则也会匹配日语的全角字符。

\W非字母和数字。

\w以外的单个字符。

\s空字符。相当于[\t\n\r\f]

\S非空字符。[\t\n\r\f]以外的单个字符。

\d数字。即[0-9]

\D非数字
\A字符串头部。与^不同的是,它不受有无换行符的影响。
\Z字符串尾部。若字符串以换行符结尾,则匹配换行符前的位置。ruby1.8特性:以前,只匹配字符串尾部换行符前的位置,现在则扩大到字符串的尾部。trap::Regexpp\n.gsub(/\Z/,o)
=o\n(1.6)
=o\no(1.8)

\z字符串结尾。与$以及\Z不同的是,它不受有无换行符的影响。

\b在字符范围描述符之外时表示词边界(匹配从\w到\W)。在字符范围描述符之内时表示退格符(0x08)。

\B非词边界

\G在上次成功匹配的地方(之后)进行匹配(不留余地)。只有在首次使用时才会匹配到头部(与\A相同)。可以用在scan和gsub中。当您想在上次匹配的地方之后再进行匹配的话,可以使用。举个简单(没什么用)的例子。#从头取出3位数字(数字必须相连)。
str=123456789
str.scan(/\G\d\d\d/){|m|pm}
[]指定字符范围。请参考字符范围。

*前面元素至少出现0次。尽可能匹配较长的部分。
*?负责指定数量(quantifiers)。表示前面元素至少出现0次(尽量匹配短的部分)+负责指定数量(quantifiers)。表示前面元素至少出现1次+?负责指定数量(quantifiers)。表示前面元素至少出现1次(尽量匹配短的部分){m}{m,}{m,n}指定元素重复出现的次数(intervalquantifier)。分别表示前面元素重复出现m次至少m次至少m次,至多n次{,n}或{,}将导致匹配失败。str=foofoofoo
pstr[/(foo){1}/]#=foo
pstr[/(foo){2,}/]#=foofoofoo
pstr[/(foo){1,2}/]#=foofoo
正则表达式?,*,+分别等同于{0,1},{0,}{1,}。{m}?{m,}?{m,n}?指定元素重复出现的次数(intervalquantifier)。分别表示前面元素重复出现m次至少m次至少m次,至多n次(尽量匹配短的部分)。?负责指定数量(quantifiers)。表示前面元素至多出现1次。??负责指定数量(quantifiers)。表示前面元素至多出现1次(尽量匹配短的部分)|选择(alternative)。()正则表达式的群组化。与括号中的正则表达式相匹配的字符串将被保存下来,供后方参考使用。\1,\2...\n后方参考(backreference)。请参考后方参考。(?#)注释。括号中的任意字符串将被忽视。(?:)不具备后方参考功能的群组化。它不为\1,\2(或$1,$2)提供服务,是一种单纯的群组功能。/(abc)/=~abc
p$1
=abc

/(?:abc)/=~abc
p$1
=nil
(?=)先行(lookahead)。使用模式(pattern)指定位置(不留间隔)(?=re1)re2
表示将匹配同时符合re1和re2的要求的字符串。re1(?=re2)
という山附は、稿にre2とマッチする矢机误が鲁く、正则表达式re1です。p/foo(?=bar)/=~foobar#=0
p$#=foo(barの婶尸の攫鼠はない)
(?!)否定先行(negativelookahead)。使用否定的模式(pattern)来指定位置(不留间隔)(?!re1)re2
该正则表达式表示,匹配re1但不匹配re2。#除000以外的3位数字
re=/(?!000)\d\d\d/
pre=~000#=nil
pre=~012#=0
pre=~123#=0

#C语言标识符(首位是[A-Za-z_]然后是[0-9A-Za-z_]的字符串)
/\b(?![0-9])\w+\b/
(?)禁用回缩功能。该功能尚处于试验阶段。将来有可能被停用,请您注意使用。特别是不要在广义库中使用。(?ixm-ixm)正则表达式中的i选项、x选项、m选项的开关。请您参考正则表达式字面值来了解选项的详细内容。re=/A(?i)a(?-i)A/
pre=~AaA#=0
pre=~AAA#=0
pre=~AAa#=nil
(?ixm-ixm:)括号中的i选项、x选项、m选项的开关。在括号范围内有效。re=/A(?i:a)A/
pre=~AaA#=0
pre=~AAA#=0
pre=~AAa#=nil

0 评论:

发表评论