正则表达式的功能有两个:检查匹配是否成功和回溯参照
新建正则表达式对象的方式
- 直接用”//“括起来
/Marlon/.class #=> Regexp- 使用%r
%r(Marlon) #=> /Marlon/“^”匹配开头,“$”匹配结尾
- 正则表达式里加上“^”则表示匹配的字符串的开头需为“^”后面的字符
- 正则表达式里加上“$”则表示匹配的字符串的开头需为“$”后面的字符
/^ABC/ =~ "ABCMarlon" #=> 0
/ABC$/ =~ "MarlonABC" #=> 6
/^ABC$/ =~ "ABC" #=> 0
/^ABC$/ =~ "ABCABC" #=> nil 注意这里,以“ABC”开头也以“ABC”结尾,但结果匹配不成功使用“[]”匹配文字范围
/[ABC]/ =~ "A" #=> 0 "ABC"中任意一个与字符串匹配
/[0-9]/ =~ "59" #=> 0 数字0到9中任意一个与字符串匹配
/[A-Za-z_-]/ =~ "-" #=> 0 字符A到Z或字符a到z或"-"或“-" 与字符串想匹配
“.”与任何字符匹配成功
- “.”能与任何单个字符匹配成功,主要用于匹配在某个位置必须有一个字符
- 在ruby1.9版本以后,“.”也可与单个汉字相匹配
反斜线”\“匹配样式
- \s,表示空白,能与一些转义符匹配成功(如空白字符、定位字符、换行字符、换页字符等)
/\s/ =~ " " #=> 0
/\s/ =~ "\n" #=> 0- \d,与0数字匹配成功
- \w,与英文或数字匹配成功
- \A,与字符串前端匹配成功
/\AMarlon/ =~ "Marlon!!!!" #=> 0
/\AMarlon/ =~ "AMarlon!!!!" #=> nil- \Z,与字符串末端匹配成功
- 反斜线 + 转义符,转义符不起转移作用,只是代表该字符本身
/\^ABC/ =~ "ABC" #=> nil
/\^ABC/ =~ "^ABC" #=> 0对反复出现的字符的匹配
- “*” 出现0次以上(包括0次)
/A*/ =~ "" #=> 0
/A*/ =~ "A" #=> 0
/A*/ =~ "AAAAA" #=> 0- “+” 出现1次以上
/A+/ =~ "" #=> nil
/A+/ =~ "A" #=> 0
/A+/ =~ "AAAAA" #=> 0- “?” 出现0次或1次
/^A?$/ =~ "" #=> 0
/^A?$/ =~ "A" #=> 0
/^A?$/ =~ "AA" #=> nil最短匹配
“()”与反复
- 用“()”将几个字符放一起,当作一个字符使用
/^(ABC)*$/ =~ "ABCABC" #=> 0多选(使用“|”)
- 与“或”相同,只要有一个满足条件即可
/^(ABC|DEF)$/ =~ "DEF" #=> 0
/^(ABC|DEF)$/ =~ "AAA" #=> nil正则表达式的选项
- i:忽略英文字母的大小写差异
/ABcdEFg/i =~ "abcdefg" #=> 0
/ABcdEFg/ =~ "abcdefg" #=> nil- s、e、u、n:指定字符编码方式
s: Shift_JIS
e: EUC-JP
u: UTF-8
n: 匹配时不考虑文字编码要匹配的字符串包括中日文等ASCII之外的文字时使用折线选项
- x:忽略正则表达式内部的空白,并忽略“#”后面的内容(可用“#”写注释语句)
- m:让“.”与换行符匹配成功
回溯参照(取出与字符串匹配成功的部分)
- 使用类似“$”+ 数字的变量去匹配成功的字符串
/(.)(.)(.)/ =~ "abc"
a = $1 #=> "a"
b = $2 #=> "b"
c = $3 #=> "c"- 不需要回溯参照时写成“(?:)”
/(.)(\d\d)(.)/ =~ '123456'
$1 #=> "1"
$2 #=> "23"
$3 #=> "4"
/(.)(?:\d\d)(.)/ =~ '123456'
$1 #=> "1"
$2 #=> "4"- 使用“$`”, “$&”, “$'”存储匹配结果
/c./ =~ 'abcdef'
$` #=> "ab" 匹配成功部分左边部分字符串
$& #=> "cd" 匹配成功部分的字符串
$' #=> "ef" 匹配成功部分右边部分字符串
















