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正则表带式对象使用备忘的更多相关文章
-
一些关于HTTP协议、表单和……的备忘
几个概念 Ajax是一种技术.asp.net是一个库.json是一种数据格式.jquery是js的库(源码).ror是ruby on rails.python,就是python.Ajax和AJAX,后 ...
-
Java对象拷贝备忘
列举 //cglib net.sf.cglib.beans.BeanCopier.create net.sf.cglib.beans.BeanCopier.copy //spring-beans or ...
-
sqlserver -- 查看当前数据库的数据表(备忘)
@_@||... 记性不好,备忘... 语句功能:查看当前数据库的所有表(根据所需,进行语句改写即可) SELECT * FROM sysobjects WHERE (xtype = 'U') 备注: ...
-
[备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象
<script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...
-
备忘:CSS术语词汇表——张鑫旭
一.叨点什么 写文章的时候经常用到一些CSS方面的专业词汇.但是毕竟芳华年少不在,脑袋有点秀逗了,很多名词都记不住,这种感觉比厕所便秘还难受.比如今天居然记不起来公司公认脸蛋最pp的同事的名字,没想到 ...
-
HTML5终极备忘大全
二.文字备忘之标签 HTML5中新增的标签 <article> 定义文章 <aside> 定义页面内容旁边的内容 <audio> 定义声音内容 <canvas ...
-
[转] HTML5终极备忘大全(图片版+文字版)---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1544 一.前言兼图片 ...
-
java正则表达式备忘
最近框架和爬虫上常要处理字符串匹配和替换的场景,备忘. 非贪婪模式 比如要匹配html文本中的连接,例如a href="www.abc.com/xyz/o"需要替换为a href= ...
-
HTML5属性备忘单
在网上闲逛的时候看到了文章,感觉总结的这个html5文章,决定转载过来,在排版的时候也帮助自己重新梳理复习一遍.毕竟学习基础最重要. by zhangxinxu from http://www.zha ...
随机推荐
-
[Unity3D]导入模型并且设置相应的属性
将资源拷贝到Assets中并设置 首先确保法线贴图的属性如下: 设置基本贴图和法线贴图 因为要发布到移动端,设置shader属性: 为了设置更好的反光效果,添加cubemap: 添加新的Materia ...
-
Oracle资源
ORACLE 10g下载地址 oracle 下载还需要用户名我自己注册了个方便大家使用下载 user:1603869780@qq.compass:qwe123QWE现在直接点击不能下载了 要经过ora ...
-
#elif
http://baike.sogou.com/v72031124.htm?fromTitle=%23elif #else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后 ...
-
python核心编程-第五章-个人笔记
1.用del删除对对象的引用 >>> a = 123 >>> a 123 >>> del a >>> a Traceback ( ...
-
R-plot
颜色.图例和线 在散点图中添加信息.图例以及回归线. 模拟数据 #模拟数据 dat <- data.frame(X = runif(100,-2,2),T1 = gl(n=4,k=25,labe ...
-
java 之 代理模式(大话设计模式)
java代理模式顾名思义,就类似于大学,我想和冰可乐,可是我又在玩游戏,于是我让我的室友帮我把可乐带回来,简单的来说我的室友就是代理,而买可乐就是需要做的行为.这是笔者理解的代理模式 大话设计模式-类 ...
-
Django的Form
Django的Form有两个基本用途: 1.用于生成html的Form表单 2.用于后台做表单验证 #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...
-
luogu4643 [国家集训队]阿狸和桃子的游戏
题目链接:洛谷 这道题乍一看非常的难,而且题目标题上的标签让人很害怕. 但其实这道题并不难写(只要想到了...emm) 因为我们只需要知道两个人得分之差,所以我们可以对条件进行变换. 我们将边权平分到 ...
-
[开源中国]Windows 10 全球市场份额正式超越 Windows 7
Windows 10 全球市场份额正式超越 Windows 7 全球知名科技数据调查公司 Netmarketshare 昨天发布了2018年12月份最新的桌面操作系统份额报告.对于微软来说,这是历史一 ...
-
Transactions and beyond it..
While data integrity is managed very effectively within a single database with row locking, deadlock ...