ruby正则表达式

正则表达式的功能有两个:检查匹配是否成功和回溯参照

新建正则表达式对象的方式

  • 直接用”//“括起来
    /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/ =~ "
    "   #=> 0
  • d,与0数字匹配成功
  • w,与英文或数字匹配成功
  • A,与字符串前端匹配成功
    /AMarlon/ =~ "Marlon!!!!"   #=> 0 
    /AMarlon/ =~ "AMarlon!!!!"  #=> nil
  • ,与字符串末端匹配成功
  • 反斜线 + 转义符,转义符不起转移作用,只是代表该字符本身
    /^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"
  • 不需要回溯参照时写成“(?:)”
    /(.)(dd)(.)/ =~ '123456'
    $1   #=> "1" 
    $2   #=> "23" 
    $3   #=> "4" 
    
    /(.)(?:dd)(.)/ =~ '123456'
    $1   #=> "1" 
    $2   #=> "4"
  • 使用“$`”, “$&”, “$'”存储匹配结果
    /c./ =~ 'abcdef'
    $`   #=> "ab"   匹配成功部分左边部分字符串
    $&   #=> "cd"   匹配成功部分的字符串
    $'   #=> "ef"    匹配成功部分右边部分字符串
原文地址:https://www.cnblogs.com/jing5022/p/3182426.html