ruby正则表达式总结

本博主要做速查表用,详细资料可参考:http://www.ruby-doc.org/core-2.0/Regexp.html


一、正则表达式的表示方法

  1. 用两个'/'即/.../表示,例:/http:\/\/www\.example\.org/
  2. 用%r{}表示,例:%r{\w+\.\w+}
  3. 用Regexp.new生成,例:r = Regexp.new 'hello\s*world'

二、特殊匹配规则

  • /./ - 匹配任何字符,除了新行
  • /^/ - 行首
  • /$/ - 行尾
  • /\d/ - 匹配数字,等价[0-9]
  • /\w/ - 匹配字母、数字、'_',等价[a-zA-Z0-9_]
  • /\h/ - 匹配十六进制字符,等价[0-9a-fA-F]
  • /\s/ - 匹配空格、'\t'、'\r'、'\n',等价[ \t\r\n\f]

        以上规则的大写形式/\D/、/\W/、/\S/、/\H/表示相应的否定形式

  • * - 匹配0个以上
  • + - 匹配1个以上
  • ? - 匹配0个或1个
  • {n} - 匹配n个
  • {n,} - 匹配n个或以上
  • {,m} - 匹配m个或以下
  • {n,m} - 匹配n到m个,含n、m

        注意ruby的正则表达式默认是贪婪匹配的,如果要尽量少的匹配可在原表达式后加'?',如/\w+?_/匹配"abc_def_"结果是"abc_"而不是"abc_def_"

  • /.../m - 使换行符可被'.'匹配,多行匹配
  • /.../i - 忽略大小写
  • /.../x - 忽略空格和正则表达式中的注释
  • /.../o - 只执行一次#{}
  • /.../u - 匹配UTF-8
  • /.../e - 匹配EUC-JP,日本人写的没办法,羡慕啊
  • /.../s - 匹配Windows-31J
  • /.../n - 匹配ASCII-8BIT


三、正则表达式操作

1、匹配

  • =~ - 肯定匹配,返回第一个匹配的位置(从0开始),匹配失败返回nil,例:/hello/ =~ 'hello world' #=> 0
  • !~ - 否定匹配,不能匹配返回true,匹配成功返回false,例:/hello/ =~ 'hello world' #=> false
  • match - 返回MatchData类型,失败则返回nil,用法类似数组,例:m = /\d+-(\d+)/.match '123-45678' # m[0] == '123-45678', m[1] == '45678'
2、替换
  • str.sub(/.../, '...') - 替换一次,例:puts "hello world".sub(/world/, 'ruby') #=> hello ruby
  • str.gsub(/.../, '...') - 全局替换,例:puts "hello world".gsub(/\w/, '*') #=> ***** *****
        在sub和gsub后加'!'可以修改原有字符串,否则只是返回一个新的字符串

3、匹配所有

        str.scan(/.../) { |item| ... },扫描匹配所有,item可以使用[]操作选取子匹配


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值