Regexp

正则表达式的类。正则表达式的字面值是以双斜线内夹表达式的形式生成的。

/^this is regexp/

还可以使用Regexp.new(string)来动态地生成正则表达式对象。

超类:

类方法:

Regexp.compile(string[, option[, code]])
Regexp.new(string[, option[, code]])

编译string后生成并返回一个正则表达式对象。

若第二参数是Fixnum的话,其值可以任选下列中的若干项

若第二参数并非Fixnum,则被看作是布尔值。若为真(nil,false以外的值)的话,其效果等同于指定了Regexp::IGNORECASE

若指定了第三参数的话,进行匹配时将使用指定的字符编码而不受$KCODE的影响。字符编码只取决于字符串参数的首字符,这同给$KCODE赋值时的原则是一致的。

若第一参数是正则表达式的话,将拷贝并返回一个内容相同(但是,上述标识的内容将被清楚)的正则表达式。此时将按照第二、第三参数的要求对复制的正则表达式进行设定。

ruby 1.8 特性:若第一参数为正则表达式,则对其进行复制并返回复制结果。此时将忽略第二、第三参数的规定,但会出现警告。

若正则表达式的编译失败,则引发RegexpError异常。

Regexp.escape(string[,kcode])
Regexp.quote(string[,kcode])

string中的“特殊字符”前面插入转义字符(反斜线)后返回该字符串,这里的“特殊字符”是指那些在正则表达式中具有特殊意义的字符。此时,以可选参数kcode来设定字符串的字符编码(省略时使用$KCODE的值)。

指定字符编码的方法与$KCODE相同。

Regexp.last_match

返回当前范围内的最后一次正则表达式匹配的MatchData对象。调用该方法与调用$~是一样的。

/(.)(.)/ =~ "ab"
p Regexp.last_match # => #<MatchData:0x4599e58>
p Regexp.last_match[0] # => "ab"
p Regexp.last_match[1] # => "a"
p Regexp.last_match[2] # => "b"
p Regexp.last_match[3] # => nil
Regexp.last_match([nth]) ((<ruby 1.7 特性>))

若整数nth为0,则返回匹配的字符串($&)。除此以外,则返回与第nth个括号相匹配的部分字符串($1,$2,...)。若没有相应的括号或未完成匹配,则返回nil。

/(.)(.)/ =~ "ab"
p Regexp.last_match # => #<MatchData:0x4599e58>
p Regexp.last_match(0) # => "ab"
p Regexp.last_match(1) # => "a"
p Regexp.last_match(2) # => "b"
p Regexp.last_match(3) # => nil

若整个正则表达式都没有成功匹配时,无参数的Regexp.last_match会返回nil,因此last_match[1]就会引发NameError异常。而last_match(1)却返回nil

Regexp.union([pattern, ...]) ((<ruby 1.8 特性>)) version 1.8.1 以后

|将传给参数的pattern连起来之后,以Regexp的形式将其返回。只要与其中的一个pattern相匹配,就意味着与Regexp相匹配。

p Regexp.union(/a/, /b/, /c/) #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/

pattern可以是Regexp或String。若是String的话,则意味着要与该字符串本身相匹配,随后该pattern将被纳入Regexp之中。

p Regexp.union("a", "?", "b") # => /a|\?|b/
p Regexp.union(/a/, "*") # => /(?-mix:a)|\*/

若没有任何参数时,则返回一个绝对不会匹配的Regexp。

p Regexp.union() # => /(?!)/

最终返回的Regexp的字符编码与传给参数的Regexp的字符编码相一致。若同时给出了若干个编译过的固定编码Regexp时,这些编码必须一致。若存在不同编码的Regexp时,将引发ArgumentError。

p Regexp.union(/a/e, /b/e) # => /(?-mix:a)|(?-mix:b)/e
p Regexp.union(/a/e, /b/s) # => ArgumentError

若同时存在固定编码Regexp和非固定编码Regexp时,最终返回的Regexp的编码以那个固定编码为准。

p Regexp.union(/a/e, /b/) # => /(?-mix:a)|(?-mix:b)/e

方法:

self =~ string
self === string

string字符串进行正则表达式的匹配操作。若匹配成功则返回匹配位置的索引(首位为0)。若匹配失败或者stringnil时,返回nil

内部变量$~中保存的是与匹配相关的信息。

string既非nil又非String对象时,引发TypeError异常。

ruby 1.7 特性:Regexp#=== 返回布尔值。若参数并非字符串或匹配失败则返回false,若匹配成功则返回true。

~ self

$_变量的值之间进行匹配操作。等同于

self =~ $_
casefold?

若编译正则表达式时不区分大小写,则返回真。

kcode

采用与$KCODE相同的形式返回编译正则表达式时的字符编码。若编译正则表达式时没有固定的编码(使用匹配时的$KCODE的值)时,返回nil。

match(str)
match(str, [pos]) ((<ruby 1.9 特性>))

除去返回MatchData对象这点区别以外,它与self =~ str是相同的。匹配失败时返回nil。

若只想得到与正则表达式相匹配的部分字符串时,可以

bar = /foo(.*)baz/.match("foobarbaz").to_a[1]

foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.indexes(1,2,3)

这样。(之所以使用to_a是因为考虑到可能会出现匹配失败的情况。)

ruby中Regexp用法的更多相关文章

  1. [No000010]Ruby 中一些百分号(%)的用法小结

    #Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...

  2. MySQL中REGEXP正则表达式使用大全

    REGEXP在mysql是用来执行正则表达式的一个函数 像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看. ...

  3. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  4. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  5. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  6. 谈谈Ruby中的类变量

    Ruby中的类变量,很多文章都是不太建议使用的,主要原因在于他的一些特性容易导致犯一些错误,尤其在广泛使用元编程的时候. 初步接触类变量可能觉得他跟C++的类静态成员和Java中的静态变量没什么区别, ...

  7. [翻译]理解Ruby中的blocks,Procs和lambda

    原文出处:Understanding Ruby Blocks, Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引 ...

  8. c#初学-多线程中lock用法的经典实例

    本文转载自:http://www.cnblogs.com/promise-7/articles/2354077.html 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被 ...

  9. 理解Ruby中的作用域

    作用域对于Ruby以及其它编程语言都是一个需要理解的至关重要的基础知识.在我刚开始学习ruby的时候遇到很多诸如变量未定义.变量没有正确赋值之类的问题,归根结底是因为自己对于ruby作用域的了解不够, ...

随机推荐

  1. Oracle财务系统常用标准报表

    http://erpoperator.blog.163.com/blog/static/17899637220111181121616/ Oracle财务系统常用标准报表 总账系统 系统报表名 中文译 ...

  2. SignalR简单封装

    需求:Asp.Net MVC 开发客户端,实现与服务器端实时通信. 众所周知,Web开发是基于http的请求响应模型,每次刷新都需要客户端(浏览器)主动发起请求,那么,这个问题怎么解?Asp.Net ...

  3. SQL Server 维护计划(数据库备份)

    公司的项目都需要定期备份,程序备份关掉iis站点复制文件就可以了,难受的地方就是数据库的备份了.服务器上装的大都是英文版,一看见英文,操作都变得小心翼翼起来,生怕哪里搞错,第二天就要被安排写辞职申请了 ...

  4. JAVA 从头开始<三>

    一.数据类型转换 取反:1变0,0变1 强转 Insteger.toBinaryString(-7); 下面这样写会出错,要用l来接收 为什么byte b 可以接收int类型(而不是10b),大数据类 ...

  5. Day 41 线程

    进程只能在同一个时间干一件事情,如果想同时干两件或者多件事情,进程就无能为力了. 进程在执行过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行. 一是由于进程是资源的 ...

  6. Linux openvswitch 性能调优-flow-eviction-threshold

    原文:https://www.cnblogs.com/scottieyuyang/p/5683656.html Increasing the flow-eviction threshold The t ...

  7. LayUI把表格中的时间戳改成格式化的时间

  8. (1)Oracle基础--用户与登录

    一.用户 · 系统用户 <1> sys,system  sys和system是权限比较高的用户,且sys比system权限高.使用sys登录必须使用sysdba或者sysoper的权限,而 ...

  9. jmeter-linux下运行

    1.2 在命令行下运行脚本 将1.1中的脚本保存,在编辑是随时可以保存,保存后是一个jmx格式的文件(如图),这个就是要在命令行下运行的脚本(作为参数运行).这个脚本文件可以不包含1.1中第四和第五步 ...

  10. 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...