Ruby 正则表达式实例

2017-09-30  本文已影响362人  changsanjiang
#!/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 

上一篇下一篇

猜你喜欢

热点阅读