ruby 正则表达式Regexp

Posted wf0117

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 正则表达式Regexp相关的知识,希望对你有一定的参考价值。

ruby正则表达式在线编辑器:rubular

一般规则:

  /a/匹配字符a。    
  /?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, , [, ], {, }, (, ), +, *.    
  .匹配任意字符,例如/a./匹配ab和ac
  /[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/
  /[^a-zA-Z0-9]/匹配不在该范围内的字符串
  /[d]/代表任意数字
  /[w]/代表任意字母,数字或者_
  /[s]/代表空白字符,包括空格,TAB和换行
  /[D]/,/[W]/,/[S]/均为上述的否定情况

高级规则:

  ?代表0或1个字符。/Mrs?.?/匹配"Mr","Mrs","Mr.","Mrs."(非贪婪)
  *代表0或多个字符。/Hello*/匹配"Hello","HelloJack"(贪婪)
  +代表1或多个字符。/a+c/匹配:"abc","abbdrec"等等(贪婪)
  /d{3}/匹配3个数字
  /d{1,10}/匹配1-10个数字
  /d{3,}/匹配3个数字以上
  /([A-Z]d){5}/匹配首位是大写字母,后面4个是数字的字符串

锚:

^     行首
$     行尾
A    字符串的开始
z    字符串的结尾
    字符串的结尾(不包括最后的换行符)
    单词边界

 

正则表达式创建:

r1 = Regexp.new([Rr]uby)

r2 = /[Rr]by/

# 这种写法类似于字符串数组的创建
r3 = %r{[Rr]uby}

 

正则表达式修饰符:

技术分享图片

常用方法

  • 正则匹配操作符=~ 与 !~

    str = <<HERE
      Thie is a document.
      It contains a lot of date string like 2008-01-02
      its create at 2018-03-21
    HERE
    
    # 正则表达式
    r = /(d{4})-(d{2})-(d{2})/
    # 正则表达式 =~ 字符串 # 无法匹配时返回nil匹配成功则返回该字符串起始符位置 # !~与 =~相反,常用于条件判断 p r =~ str # $1包含的是正则表达式中从左侧开始的第一对小括号内的子模式所匹配的字符串 # 匹配时,是从外到内,从左到右的顺序 p $1 # => "2008" p $2 # => "01" p $3 # => "02" # 匹配部分前的字符串 p $` # => " Thie is a document. It contains a lot of date string like " # 匹配部分的字符串 # => "2008-01-02" p $& # 匹配部分后的字符串 p $ # => " its create at 2018-03-21 "

     

  • Regexp的match方法

    md = r.match(str)
    p md  #=> #<MatchData "2008-01-02" 1:"2008" 2:"01" 3:"02">
    p md.class # => MatchData
    p md[0] # =>  "2008-01-02"
    p md[1] # =>  "2008"
    p md[2] # =>  "01"
    p md[3] # =>  "02"

     

  • String类的scan方法

    # 没有代码块的使用方法返回的是匹配结果数组
    matches = str.scan(r)
    p matches # => [["2008", "01", "02"], ["2018", "03", "21"]]
    
    # 使用代码块对匹配的所有结果进行迭代
    str.scan(r) do |year, month, day|
      puts "#{year}年#{month}月#{day}日"
    end
    # => 2008年01月02日
    # => 2018年03月21日

     

  • sub,gsub方法

    str = abc def g hi
    p str.sub(/s+/, &) # => "abc&def g hi"(只替换第一个匹配项)
    p str.gsub(/s+/, &) # => "abc&def&g&hi"(替换所有匹配项)

     


参考:

一步一步学Ruby(九):Ruby正则表达式(上)

一步一步学Ruby(十):Ruby正则表达式(下)

Ruby 编程之正则表达式详解

 
















以上是关于ruby 正则表达式Regexp的主要内容,如果未能解决你的问题,请参考以下文章

Ruby Regexp 组匹配,在 1 行上分配变量

正则表达式简介

正则表达式(RegExp)

MySQL正则表达式 REGEXP详解

吃通 正则表达式regexp

MySQL正则表达式 REGEXP详解