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