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. TCP的发送系列 — tcp_sendmsg()的实现(二)

    主要内容:Socket发送函数在TCP层的实现 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 在上篇blog中分析了tcp_sendmsg()这个主要函 ...

  2. Java的访问权限详解(3+1)public private protected default

    Java使用三个关键字在类的内部设定访问权限:public.private.protected.这些访问指定词(access specifier)决定了紧跟其后被定义的成员(方法或属性)可以被谁使用. ...

  3. EBS财务模块表结构

     gl_code_combinations:科目组合 字段名 含义 备注 code_combination_id 主键,科目编码ID,自动编号 segment1 分行代码 setgment2 是受 ...

  4. python在windows下使用setuptools安装egg文件

    最近和同学做个东西,需要安装python的第三方函数库,看了网上的介绍,很是麻烦,这是我实践总结出来的,希望对大家有用. 以安装第三方库networkx 为例,其余函数库都是一个套路,看完就会滴. 1 ...

  5. 安卓中不同APP之间的消息通信

    昨天在腾讯实习生招聘初试面试时面试官问道我关于两个APP之间相互通信的方式,当时自己回道到了contentProvider与BroadcastReceiver.但他接着问还有没有其它的方式,我跟他说可 ...

  6. Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案

    Linux下的jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案问题linux的jetty下发布程序后再启动jetty服务时 ...

  7. python上下文管理器ContextLib及with语句

    http://blog.csdn.net/pipisorry/article/details/50444736 with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能 ...

  8. java同步synchronized

    java同步synchronized volatile仅仅用来保证该变量对所有线程的可见性,但不保证原子性. 看下面的这段代码: /** * * @author InJavaWeTrust * */ ...

  9. Android 官方命令深入分析之Android Debug Bridge(adb)

    作者:宋志辉 Android Debug Brideg(adb)是一个多用途的命令行工具.可以与Android虚拟机进行通信或连接真机.它同样提供了访问设备shell的高级命令行操作的权限.它是一个包 ...

  10. 存储那些事儿(一):异构虚拟化一种实现SMIS

    1. 背景 企业存储是企业信息系统管理很重要的组成部分.企业存储包含了大量的数据,供大量人使用.对于航空系统和金融系统来说,信息存储就更加重要了. 作为企业信息存储,扩展性是非常重要的,因为现在企业对 ...