ruby对于正则表达式的使用是非常灵活的,提供了专门的正则表达式对象Regexp.其包括match实例方法,字符串也含有该方法.so可以这么做:

/a/ =~ "a"
"a" =~ /a/
"a".match("a")
/a/.match("a")

但是在新版的ruby中不可以这样:

"a" =~ "a" #error!

另外正则的比较还可以用操作符===,其返回true/false表示是否匹配,但是对调一下结果就不一样,这点要注意:

irb(main):079:0> "a"===/a/
=> false
irb(main):080:0> /a/==="a"
=> true

下面举一个例子:

irb(main):083:0> str
=> "vax12345tn19980202.!!!"
irb(main):084:0> v = str.match(/a(.)(\d+)(\D{1,5})(\d+)([,.:]?)/)
=> #<MatchData "ax12345tn19980202." 1:"x" 2:"12345" 3:"tn" 4:"19980202" 5:".">
irb(main):085:0> v[0]
=> "ax12345tn19980202."
irb(main):086:0> v[1]
=> "x"
irb(main):087:0> v[3]
=> "tn"
irb(main):088:0> v.begin 0
=> 1
irb(main):089:0> v.begin 3
=> 8
irb(main):090:0> v.end 3
=> 10
irb(main):091:0> v.offset 3
=> [8, 10]
irb(main):092:0> v.post_match
=> "!!!"
irb(main):093:0> v.pre_match
=> "v"
irb(main):094:0> v.string
=> "vax12345tn19980202.!!!"
irb(main):095:0> v[2]
=> "12345"

为了使用方便(类似于用过就丢代码),也有全局匹配的正则表达式对象$~,操作和上面类似:

irb(main):097:0> str.match(/a(.)(\d+)(\D{1,5})(\d+)([,.:]?)/)
=> #<MatchData "ax12345tn19980202." 1:"x" 2:"12345" 3:"tn" 4:"19980202" 5:".">
irb(main):098:0> $~
=> #<MatchData "ax12345tn19980202." 1:"x" 2:"12345" 3:"tn" 4:"19980202" 5:".">
irb(main):099:0> $&
=> "ax12345tn19980202."
irb(main):100:0> $`
=> "v"
irb(main):101:0> $'
=> "!!!"
irb(main):102:0> $+
=> "."
irb(main):103:0> $1
=> "x"
irb(main):104:0> $2
=> "12345"
irb(main):105:0> $3
=> "tn"

对于字符串也含有一些正则的表达式的实例方法,比如sub,gsub,scan等等,其中在sub,gsub之类的方法中第二个参数可以使用置换变量来表示:\&和\0表示整个匹配的字符串,\1至\9是第n个括号内匹配的字符串,另外也可以用\`,\'和\+它们和$`,$'和$+相对应:

irb(main):117:0> s="abc12345xyz"
=> "abc12345xyz"
irb(main):118:0> s.sub(/(\d+)/,'(\&)')
=> "abc(12345)xyz"

ruby正则表带式对象使用备忘的更多相关文章

  1. 一些关于HTTP协议、表单和……的备忘

    几个概念 Ajax是一种技术.asp.net是一个库.json是一种数据格式.jquery是js的库(源码).ror是ruby on rails.python,就是python.Ajax和AJAX,后 ...

  2. Java对象拷贝备忘

    列举 //cglib net.sf.cglib.beans.BeanCopier.create net.sf.cglib.beans.BeanCopier.copy //spring-beans or ...

  3. sqlserver -- 查看当前数据库的数据表(备忘)

    @_@||... 记性不好,备忘... 语句功能:查看当前数据库的所有表(根据所需,进行语句改写即可) SELECT * FROM sysobjects WHERE (xtype = 'U') 备注: ...

  4. [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象

    <script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...

  5. 备忘:CSS术语词汇表——张鑫旭

    一.叨点什么 写文章的时候经常用到一些CSS方面的专业词汇.但是毕竟芳华年少不在,脑袋有点秀逗了,很多名词都记不住,这种感觉比厕所便秘还难受.比如今天居然记不起来公司公认脸蛋最pp的同事的名字,没想到 ...

  6. HTML5终极备忘大全

    二.文字备忘之标签 HTML5中新增的标签 <article> 定义文章 <aside> 定义页面内容旁边的内容 <audio> 定义声音内容 <canvas ...

  7. [转] HTML5终极备忘大全(图片版+文字版)---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1544 一.前言兼图片 ...

  8. java正则表达式备忘

    最近框架和爬虫上常要处理字符串匹配和替换的场景,备忘. 非贪婪模式 比如要匹配html文本中的连接,例如a href="www.abc.com/xyz/o"需要替换为a href= ...

  9. HTML5属性备忘单

    在网上闲逛的时候看到了文章,感觉总结的这个html5文章,决定转载过来,在排版的时候也帮助自己重新梳理复习一遍.毕竟学习基础最重要. by zhangxinxu from http://www.zha ...

随机推荐

  1. storm消费kafka实现实时计算

    大致架构 * 每个应用实例部署一个日志agent * agent实时将日志发送到kafka * storm实时计算日志 * storm计算结果保存到hbase storm消费kafka 创建实时计算项 ...

  2. Swift基础语法(常量变量、数据类型、元组、可选、断言)

    本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ...

  3. Unity插件 - MeshEditor(七)变形动画骨骼及蒙皮

    MeshAnimation在物体的顶点比较多的情况下,悲剧是显而可见的,我一个一个的点选顶点肯定得累死,而且对于形态的调控不是很方便,应该说是很麻烦,要知道,骨骼动画因为有了骨骼以及蒙皮信息而有了灵魂 ...

  4. 安卓Eclipse如何快速修改工程名及包名

    修改工程名/包名,也是我们在开发中经常遇到的问题,比如我们在开发过程中突然觉得项目名不合适,或者根包名不合适想修改一下怎么办? 如上图所示工程,我想改变一下我的项目名,如把zzz改成xxx,把我的根包 ...

  5. 【java集合框架源码剖析系列】java源码剖析之HashMap

    前言:之所以打算写java集合框架源码剖析系列博客是因为自己反思了一下阿里内推一面的失败(估计没过,因为写此博客已距阿里巴巴一面一个星期),当时面试完之后感觉自己回答的挺好的,而且据面试官最后说的这几 ...

  6. Linux之mailx的使用

    mailx是UNIX系统上用来处理邮件的工具,使用它可以发送,读取邮件.下面看看如何使用它来发送邮件. 发送格式 mailx -s subject user@xxx.com < message_ ...

  7. Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴

    对于在Linux下开发的同学来说,Shell可以说是一种基本功. 对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell.对于Release Team,软件配置管理的 ...

  8. ROS(indigo)使用Qt Creator Plug in即ros_qtc_plugin

    更为详细版本请参考: http://blog.csdn.net/zhangrelay/article/details/52214411 结合看更为具体. 首先,先上原版参考: 1 http://wik ...

  9. ubuntu 中 eclipse 的菜单栏 显示问题

    在新版ubuntu中装eclipse,很多人会遇到eclipse打开之后没有菜单栏, 其实就是缺一个环境变量UBUNTU_MENUPROXY. 在/etc/profile 里面新建这个变量并且把值写成 ...

  10. libcoro:在c++中支持coroutine

    起因 在第一个版本的libtnet开发完成之后,我一直在思考如何让异步方式的网络编程更加简单. 虽然libtnet通过c++ shared_ptr以及function等技术很大程度上面解决了异步代码编 ...