• 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"    匹配成功部分右边部分字符串
  • 相关阅读:
    18种典型算法
    幂法和反幂法
    关于Ubuntu下安装Win8和Win8下安装Ubuntu的注意事项
    静态链接库与动态链接库
    面向对象系列二(封装)
    基于ASP.NET WPF技术及MVP模式实战太平人寿客户管理项目开发(Repository模式)
    不要对终于用户谈云
    cocos2d-x 3.0 创建项目
    Android OpenGL ES 画球体
    设计模式 适配器模式 以手机充电器为例
  • 原文地址:https://www.cnblogs.com/jing5022/p/3182426.html
Copyright © 2020-2023  润新知