正则表达式的功能有两个:检查匹配是否成功和回溯参照
新建正则表达式对象的方式
- 直接用”//“括起来
/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_JISe: EUC-JPu: UTF-8n: 匹配时不考虑文字编码
要匹配的字符串包括中日文等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" 匹配成功部分右边部分字符串