美文网首页
Ruby 正则表达式实例

Ruby 正则表达式实例

作者: changsanjiang | 来源:发表于2017-09-30 15:04 被阅读362次
    #!/usr/bin/ruby
    # -*- coding: UTF-8 -*-
    
    # 正则表达式实例
    
    # => 字符
        # => 实例         描述
        # => /ruby/         匹配 "Ruby"
        # => ¥              匹配 Yen 符号. Ruby 1.9 和 Ruby 1.8 支持多个字符.
    
    # => 字符类
        # => 实例         描述
        # => /[Rr]uby/      匹配 "Ruby" 或 "ruby"
        # => /rub[ye]       匹配 "ruby" 或 "rube"
        # => /[aeiou]/      匹配任何一个小些元音字母
        # => /[0-9]/        匹配任何一个数字, 与 /[0123456789]/相同
        # => /[a-z]/        匹配任何小写 ASCII 字母
        # => /[A-Z]/        匹配任何一个大写 ASCII 字母
        # => /[a-zA-Z0-9]   匹配任何一个括号内的字符
        # => /[^aeiou]      匹配任何一个非小写元音字母的字符
        # => /[^0-9]/       匹配任何一个非数字字符
    
    # => 特殊字符类
        # => /./            匹配除了换行符以外的其他任意字符
        # => /./m           在多行模式下, 也能匹配换行符
        # => /\d/           匹配一个数字, 等同于 /[0-9]/
        # => /\D/           匹配一个非数字, 等同于 /[^0-9]/
        # => /\s/           匹配一个空白字符, 等同于 /[\t\r\n\f]/
        # => /\S/           匹配一个非空白字符, 等同于 /[^ \t\r\n\f]/
        # => /\w/           匹配一个单词字符, 等同于 /[A-Za-z0-9_]/
        # => /\W/           匹配一个非单词字符, 等同于 /[^A-Za-z0-9_]/
    
    # => 重复
        # => 实例         描述 
        # => /ruby?/        匹配 "rub" 或 "ruby". 其中, y 是可有可无的
        # => /ruby*/        匹配 "rub" 加上 0以上个 y.
        # => /ruby+/        匹配 "rub" 加上 1以上个 y.
        # => /\d{3}/        刚好匹配 3个数字.
        # => /\d{3,}/       匹配3个或多个数字.
        # => /\d{3,5}/      匹配3个、4个、5个数字. 
    
    
    # => 非贪婪重复
        # => 这会匹配最小次数的重复
    
        # => 实例         描述
        # => /<.*>/         贪婪重复: 匹配 "<ruby>perl>"   # (. 匹配除了换行符以外的其他任意字符)
        # => /<.*?>/        非贪婪重复: 匹配 "<ruby>perl>" 中的 "<ruby>"
    
    # => 通过圆括号进行分组
        # => 实例             描述
        # => /\D\d+/            无分组: +重复 \d
        # => /(\D\d)+/          分组: + 重复 \D\d 对
        # => /([Rr]uby(,)?)+/   匹配 "Ruby"、"Ruby, ruby, Ruby", 等等
    
    
    # => 反向引用
        # => 这会再次匹配之前匹配过的分组
        # => 如下 \1 ...
        # => 实例                 描述
        # => /([Rr]uby&\1alis)      匹配  ruby*ralis 或 Ruby&Rails
        # => /(['"])(?:(?!\1).)*\2/ 单引号或双引号字符串. \1 匹配第一个分组所匹配的字符, \2匹配第二个分组所匹配的字符, 依次类推.
    
    
    # => 替换
        # => 实例                 描述
        # => /ruby|rube/            匹配 "ruby" 或 "rube"
        # => /rub(y|le))/           匹配 "ruby" 或 "ruble"
        # => /ruby(!+|\?)/          "ruby"后跟一个或多个 ! 或者跟一个 ?
    
    # => 锚
        # => 这需要指定匹配位置.
    
        # => 实例         描述
        # => /^Ruby/        匹配以 "Ruby" 开头的字符串或行
        # => /Ruby$/        匹配以 "Ruby" 结尾的字符串或行
        # => /\ARuby/       匹配以 "Ruby" 开头的字符串
        # => /Ruby\Z/       匹配以 "Ruby" 结尾的字符串
        # => /\bRuby\b/     匹配单词边界的 "Ruby"
        # => /\brub\B/      \B 是非单词边界: 匹配 "rube" 和 "ruby" 中的 "rub", 但不匹配单独的 "rub"
        # => /Ruby(?=!)/    如果 "Ruby" 后跟着一个感叹号, 则匹配 "Ruby"
        # => Ruby(?!!)/     如果 "Ruby" 后没有跟着一个感叹号, 则匹配 "Ruby"
    
    # => 圆括号的特殊语法
        # => 实例                 描述
        # => /R(?#comment)/         匹配 "R". 所有剩余的字符都是注释.
        # => /R(?!)uby/             当匹配 "uby" 时不区分大小写.
        # => /R(?i:uby)/            与上面相同.
        # => /rub(?:y|le))/         只分组, 不进行 \1 反向引用.       
    
    # => 搜索和替换
        # => sub 和 gsub 及他们的替代变量 sub! 和 gsub! 是使用正则表达式时重要的字符串方法. 
        # => 所有这些方法都是使用正则表达式模式执行搜索与替换操作. sub 和 sub! 替换模式的第一次出现, gsub 和 gsub! 替换模式的所有出现.
        # => sub 和 gsub 返回一个新的字符串, 保持原始的字符串不被修改, 而 sub! 和 gsub! 则会修改他们调用的字符串. 
        # => sub 和 gsub 返回一个新的字符串, 保持原始的字符串不被修改, 而 sub! 和 gsub! 则会修改他们调用的字符串. 
    
    phone = "138-3453-1111 #这是一个电话号码"
    
    # 删除 Ruby 的注释
    phone = phone.sub!(/#.*$/, "")
    puts "电话号码: #{phone}"
    
    # 移除数字以外的其他字符
    phone = phone.gsub!(/\D/, "")
    puts "电话号码: #{phone}"
     
    text = "rails 是 rails, Ruby on Rails 非常好的 Ruby 框架"
    
    # 把所有的 "rails" 改为 "Rails"
    #text.gsub!("rails", "Rails")
    #puts text
    
    # 把所有的单词 "Rails" 都改成首字母大写
    text.gsub!(/\brails\b/, "Rails")
    puts text 
    
    

    相关文章

      网友评论

          本文标题:Ruby 正则表达式实例

          本文链接:https://www.haomeiwen.com/subject/djagextx.html