1、正则表达式(Regexp)
正则表达式是对字符串操作的公式,用来过滤字符串或者从字符串中匹配出我们需要的字符,在各类语言中都有应用
2、基础操作字符
介绍一下常用的几个字符,想要了解更多功能,可以看看百科中的介绍
3、类型转换
(1)字符串转换为正则表达式 Regexp.new(str1),可以将字符串str1转换成正则表达式,如果正则表达式里面有转义字符,需要在转义字符前面加反斜杠。
irb(main):001:0> str1 = "abc" => "abc" irb(main):002:0> Regexp.new(str1) #已经转成了正则表达式 => /abc/ irb(main):003:0> "abcdef" =~ Regexp.new(str1) #返回的不是nil,说明已经匹配上了 => 0
4、正则表达式在ruby中的应用
(1)=~ 判断正则表达式是否匹配到字符串,匹配的话,返回字符串匹配字符的首个索引,否则返回nil
#定义一个匹配时间的正则表达式 irb(main):012:0> REG = /20\d{2}-?\d{2}-?\d{2}/ => /20\d{2}-?\d{2}-?\d{2}/ #返回0,说明字符串从第一个字符开始匹配到正则表达式 irb(main):013:0> REG =~ "2018-09-08" => 0 #返回nil说明没有匹配上 irb(main):014:0> REG =~ "201-09-08" => nil
正则表达式解析:
这是一个匹配日期的正则表达式,我们分成两部分解释
第一部分:20\d{2}
\d{2}代表两个数字字符,总体代表20后面跟着两个数字字符,能匹配到"2018-09-08”字符串中的“2018”
第二部分:-?\d{2}
-?代表0个或者1个“-”字符,说明这个正则表达式能匹配"2018-09-08”,也能匹配“20180908”
(2)match 描述匹配的MatchData对象,如果没有匹配,则返回nil。经常与正则表达式字符中()搭配使用
#定义一个正则表达式 irb(main):018:0> REG1 = /20\d{2}-?\d{2}-?\d{2}/ => /20\d{2}-?\d{2}-?\d{2}/ #返回一个MatchData对象,赋值到m变量中。MatchData对象可以看成一个数组。 #第一个值(索引为0)为整个正则表达式匹配到的字符串,第二个值(索引为1)为正则表达式第一个括号里面匹配到的值,以此类推。 irb(main):019:0> m = REG1.match("2018-09-08-07-06-05") => #<MatchData "2018-09-08"> #第一个值为/20\d{2}-?\d{2}-?\d{2}/匹配到的值 irb(main):020:0> m[0] => "2018-09-08" #第二个值为正则表达式第一个括号里面匹配到的值,因为此正则表达式没有括号,所以第二个值为空 irb(main):021:0> m[1] => nil #定义一个正则表达式,将20\d{2}部分用括号括起来 irb(main):023:0> REG2 = /(20\d{2})-?\d{2}-?\d{2}/ => /(20\d{2})-?\d{2}-?\d{2}/ #返回一个MatchData对象 irb(main):024:0> m2 = REG2.match("2018-09-08") => #<MatchData "2018-09-08" 1:"2018"> #第一个值为/(20\d{2})-?\d{2}-?\d{2}/匹配到的值 irb(main):025:0> m2[0] => "2018-09-08" #第二个值为20\d{2}括号里面的内容匹配到的值 irb(main):026:0> m2[1] => "2018" irb(main):028:0> REG3 = /(20\d{2})-?(\d{2})-?(\d{2})/ => /(20\d{2})-?(\d{2})-?(\d{2})/ #返回一个MatchData对象,m[0]为"2018-09-08",m[1]为"2018",m[2]为"09" irb(main):029:0> m3 = REG3.match("2018-09-08") => #<MatchData "2018-09-08" 1:"2018" 2:"09" 3:"08"> irb(main):030:0> m3[0] => "2018-09-08" irb(main):031:0> m3[1] => "2018" irb(main):032:0> m3[2] => "09"