`
haiyang
  • 浏览: 70352 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ruby正则表达式学习笔记一

阅读更多

本文转自javaeye论坛cjyzpcl. 原文为:http://www.iteye.com/topic/60620

Ruby的正则表达式以"//"作为基本框架,表达式内容位于"/"之间。表达式返回一个RegExp的对象。
表达式的一般规则:
/a/匹配字符a。
/\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *.
.匹配任意字符,例如/a./匹配ab和ac。
/[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/。
/[^a-zA-Z0-9]/匹配不在该范围内的字符串。
/[\d]/代表任意数字,/[\w]/代表任意字母,数字或者_,/[\s]/代表空白字符,包括空格,TAB和换行。
/[\D]/,/[\W]/,/[\S]/均为上述的否定情况。

高级规则:
?代表0或1个字符。/Mrs?\.?/匹配"Mr","Mrs","Mr.","Mrs."。
*代表0或多个字符。/Hello*/匹配"Hello","HelloJavaeye"。
+代表1或多个字符。/a+c/匹配:"abc","abbdrec"等等。
/d{3}/匹配3个数字。
/d{1,10}/匹配1-10个数字。
/d{3,}/匹配3个数字以上。
/([A-Z]\d){5}/匹配首位是大写字母,后面4个是数字的字符串。

String和RegExp均支持=~和match2个查询匹配方法。在irb中:
>> "The alphabet starts with abc" =~ /abc/
=> 25
>> /abc/.match("The alphabet starts with abc.")
=> #<matchdata:0x1b0d88> </matchdata:0x1b0d88>

可以看出,如果能够匹配,=~返回匹配的字符串位置,而match返回一个MatchData对象。如果不匹配返回nil。

MatchData可以取出其中符合各个子匹配的内容。看下面的例子:

We have a String : Peel,Emma,Mrs.,talented amateur
The order of the name : last name,first name, title, occupation
正则表达式为: /[A-Za-z]+,[A-Za-z]+,Mrs?\./

irb中:
>> /[A-Za-z]+,[A-Za-z]+,Mrs?\./.match("Peel,Emma,Mrs.,talented amateur")
=> #<matchdata:0x401f0a6c>
但是我们想从匹配正则表达式的String里面只取出last name和title相关的字符串,那么正则表达式可以如下: </matchdata:0x401f0a6c>

/([A-Za-z]+),[A-Za-z]+,(Mrs?\.)/

注意([A-Za-z]+) 和 (Mrs?\.),执行下面的代码:
>> /([A-Za-z]+),[A-Za-z]+,(Mrs?\.)/.match("Peel,Emma,Mrs.,talented amateur")
=> #<matchdata:0x401e0a7c>
>> puts "Dear #{$2} #{$1},"
=> Dear Mrs. Peel
()中的表达式就是子表达式。</matchdata:0x401e0a7c>

下面的代码和上面效果一样,
m = /([A-Za-z]+),[A-Za-z]+,(Mrs?\.)/.match("Peel,Emma,Mrs.,talented amateur")
puts "Dear #{m[2]} #{m[1]},"

这里m[0]返回匹配主表达式的字符串。

下面的方法是等同的:
m[n] == m.captures[n]

一些相关的方法,看下面的代码例子:

string = "My phone number is (123) 555-1234."
phone_re = /\((\d{3})\)\s+(\d{3})-(\d{4})/
m = phone_re.match(string)
print "The part of the string before the part that matched was:"
puts m.pre_match
print "The part of the string after the part that matched was:"
puts m.post_match
print "The second capture began at character "
puts m.begin(2)
print "The third capture ended at character "
puts m.end(3)

Output:

The string up to the part that matched was: My phone number is
The string after the part that matched was: .
The second capture began at character 25
The third capture ended at character 33

下章会写一些高级应用。

分享到:
评论

相关推荐

    ruby学习笔记

    根据提供的“ruby学习笔记”内容,我们可以从中提炼出多个重要的Ruby编程知识点,这些知识点对于初学者来说非常有用。下面将对这些知识点进行详细的解释与扩展。 ### 一、Ruby中的全局变量 Ruby提供了多个特殊变量...

    个人ruby学习笔记

    同时,Ruby也支持三元运算符和`case`语句,后者可用于复杂的条件匹配,包括数字范围、方法返回值和正则表达式匹配。 ### 循环结构 Ruby提供了多种循环控制结构,包括`while`、`until`、`for`、`each`、`loop`、`...

    Ruby知识点笔记

    Ruby的数据类型包括数字、字符串、数组、哈希表、区间和正则表达式。数字可以表示为八进制(前缀0)、十六进制(前缀0x)或二进制(前缀0b)。字符串可以由单引号或双引号包围,数组可以包含不同类型的元素,并且下标从0...

    Ruby自学笔记

    使用%w和%W可以创建单引号或双引号的字符串数组,%r用于创建正则表达式模式,%x用于执行Shell命令,%i用于创建符号数组。字符串还可以通过heredoc语法构建多行字符串,可以使用多个边界字符串来标识字符串的开始和...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    ruby介绍及相应的ruby demo示意源码,供大家参考学习

    Ruby还提供了丰富的内建库,如文件操作、网络通信、正则表达式等,使得开发者能快速构建各种应用。 Ruby on Rails是Ruby最知名的Web开发框架,它倡导“约定优于配置”的原则,极大地提高了开发效率。Rails提供了...

    Groovy学习笔记.pdf

    ### Groovy学习笔记知识点概述 #### 一、Groovy简介及特性 **1.1 Groovy的概念** Groovy是一种强大的编程语言,它结合了Python、Ruby等动态语言的特点,同时与Java平台高度集成,旨在为Java开发者提供一种更加灵活...

    Groovy学习笔记(适合入门者)

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 **1.1 概念** Groovy是一种灵活且功能强大的编程语言,它与Java平台紧密结合,具备诸如Python和Ruby等动态语言的特点。该语言的设计初衷是为Java开发者提供一...

    java8集合源码-fanspaceshow.github.io:学习笔记

     正则表达式 MiniDao 技术贴 [removed][removed] [removed] $(function(){ var pdfArr = $("a.pdf-name"); var urlStart = "generic/web/viewer.html?file="; pdfArr.each(function(index,element){ var aLabel = $...

    高级笔记本

    5. **查找与替换**:强大的查找和替换功能,不仅支持简单的文本搜索,还能进行正则表达式搜索,便于快速修改大量代码。 6. **多文档同时编辑**:编辑器可以同时打开并编辑多个文件,方便比较或协同工作。 7. **...

    test2-autograder-john-french:GitHub Classroom创建的test2-autograder-john-french

    还要确保随时随地提交解决方案,并将提交推送到GitHub上的远程存储库学习目标完成此任务后,您将知道如何: 编写使用Ruby语言使用基本构造的简单代码,包括方法和参数,条件,字符串和数组操作,正则表达式以及基本...

    ls_rb130:开展学校课程RB130的笔记,示例,练习

    6. **标准库和Gem**:Ruby的标准库非常丰富,包括I/O操作、网络编程、正则表达式等。另外,Ruby的Gem系统是其强大的生态之一,涵盖了大量的第三方库。 7. **Ruby on Rails**:如果课程深入,可能会涉及Ruby最著名的...

    mongodb官网文档集合

    MongoDB使用一种名为BSON(Binary JSON)的数据格式,它是JSON的一个二进制表示形式,支持更丰富的数据类型,如日期、正则表达式和二进制数据等。在文档中,“Storing Data”部分深入讲解了如何在MongoDB中存储和...

Global site tag (gtag.js) - Google Analytics