`
ybffnst
  • 浏览: 13746 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby 正则表达式

    博客分类:
  • Ruby
阅读更多
Ruby中常会用到正则表达式。正则表达式是用来表达字符串的模式(pattern)的。也可以这么理解:我们使用正则表达式来表示某种搜索规则,然后使用该正则表达式来完成字符串的搜索工作。举个例子,假定有这样的搜索规则:“字符串以’FOO’开始,以’R’结束”,那么就可以使用以下正则表达式来表示该规则。

/^FOO.*R$/
Ruby用//将正则表达式括起来。^表示开头,$表示结尾,.*表示0个以上的任意字符。

现在就讲讲正则表达式的规则的写法。正则表达式中有很多上述的具有特别意义的字符。首先是下列字符。

[ ]
范围描述符。[a-z]表示从a到z之间的任意一个。
\w
英文字母和数字。即[0-9 A-Z a-z]。
\W
非英文字母和数字
\s
空字符,即[\t\n\r\f]。
\S
非空字符。
\d
数字,即[0-9]。
\D
非数字。
\b
词边界字符(在范围描述符外部时)
\B
非词边界字符
\b
退格符(0x08)(在范围描述符内部时)
*
前面元素出现0次以上
+
前面元素出现1次以上
{m,n}
前面元素最少出现m次,最多出现n次
?
前面元素出现0次或1次
|
选择
( )
群组
其他字符
该字符本身
例如,“^f[a-z]+”表示“第一个字符是f,后面是若干个从a到z之间的字符”,可以是“fobar”或“fool”等等。这种表达法就是正则表达式(regular expression)。在搜索字符串时正则表达式非常有用,因此在UNIX的世界里,正则表达式得到了广泛的应用。grep程序就是个代表。许多人是不是经常会用到它呢?

为了学会使用正则表达式,先来试试下面这个程序。请用文件名regx.rb将程序保存下来以后再运行它。

st = "\033[7m"
en = "\033[m"

while TRUE
   print "str> "
   STDOUT.flush
   str = gets
   break if not str
   str.chop!
   print "pat> "
   STDOUT.flush
   re = gets
   break if not re
   re.chop!
   str.gsub! /#{re}/, "#{st}\\&#{en}"
   print str, "\n"
end
print "\n"
该程序会在第一次输入的字符串中按照第二次输入的正则表达式的要求寻找合适的字符串,并将其以反色显示出来。下面是运行结果。

str> foobar
pat> ^fo+
foobar
^^^
# 实际上foo的部分被反色显示了。

再试一试。

str> abc012dbcd555
pat> \\d
abc012dbcd555
   ~~~    ~~~
从上例可以看出,该程序可以检测出多处符合条件的字符串。

str> foozboozer
pat> f.*z
foozboozer
~~~~~~~~
在这个例子中,正则表达式“f.*z”并非只是对应到fooz,而是一直对应到foozbooz这里。这是因为,正则表达式总是在符合条件的结果中选择较长的一个。

正则表达式甚至可以写出让人一眼看不透的模式,这可能会像谜语一样有趣。但若过分凝炼的话,以后就很难搞懂当初的想法了。

str> Wed Feb  7 08:58:04 JST 1996
pat> [0-9]+:[0-9]+(:[0-9]+)?
Wed Feb  7 08:58:04 JST 1996
           ~~~~~~~~
Ruby用’/’将正则表达式括起来。另外还有一些方法会自动将字符串变为正则表达式。

% ruby -le 'print "abcdef" =~ /d/'
3
% ruby -le 'print "aaaaaa" =~ /d/'
nil
‘=~’是使用正则表达式进行匹配的操作符,它返回匹配成功时的位置。

到底哪些方法可以处理正则表达式呢?关于这个问题,请查阅参考手册。
分享到:
评论

相关推荐

    ruby正则表达式

    接下来,我们将深入探讨Ruby正则表达式的主要知识点。 ### 一、字符规则 1. **基础字符匹配**:`/a/`会匹配字符`a`。 2. **字符集**:`/[\d]/`匹配任意数字;`/[\w]/`匹配任何字母、数字或下划线;`/[\s]/`匹配...

    ruby正则表达式规则

    ### Ruby正则表达式规则详解 #### 一、引言 在Ruby编程语言中,正则表达式(Regular Expression)是一种强大的文本处理工具,被广泛应用于字符串搜索与替换、数据验证以及模式匹配等场景。本篇文章将深入探讨Ruby...

    js_regex,将Ruby正则表达式转换为JavaScript正则表达式。.zip

    js_regex,将Ruby正则表达式转换为JavaScript正则表达式。.zip

    精通正则表达式 中英文

    如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB.NET和c#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本...

    正则表达式经典实例

    《正则表达式经典实例》这本书深入浅出地介绍了正则表达式的基本概念和高级特性,并提供了丰富的实例,覆盖了C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等多种编程语言。 #### 二、核心内容概览 1. *...

    精通正则表达式电子书

    ### 正则表达式的全面掌握 #### 一、正则表达式概述 正则表达式是一种功能强大的文本处理工具,可以用于在各种编程语言中进行数据的搜索、替换以及提取等操作。它作为一种标准特性已经广泛应用于多种流行的语言与...

    精通正则表达式(第三版)

    如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本...

    精通正则表达式(第三版)

    如今,正则表达式已经成为众多语言及工具--Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)--中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。...

    正则表达式.pdf

    正则表达式不仅限于Python,许多编程语言都支持正则表达式,包括Java、JavaScript、Perl、Ruby等。 正则表达式的组成部分: 1. 字符:包括字母、数字、特殊字符等。 2. 元字符:包括.、*、+、?、{、}、[、]、\、^...

    完全自动的正则表达式编写工具

    PLSQL.jgcscs、PHPsolo.jgcscs、Ruby.jgcscs分别对应Oracle的PL/SQL、PHP和Ruby语言的正则表达式配置,确保在这些语言中使用的正则表达式能够准确无误地工作。 总的来说,这个“完全自动的正则表达式编写工具”是一...

    正则表达式入门指导.ppt

    在多种编程语言中,如Perl、Java、JavaScript、C#、PHP、Python、Ruby、Tcl、MySQL、Oracle等,正则表达式都扮演着重要的角色。 学习正则表达式可以做以下事情: 1. **查找字符串**:你可以使用正则表达式来检查一...

    正则表达式完整高清版

    《正则指引》针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础...

    [精通正则表达式(第3版)]中文版.(美)Jeffrey.E.F.Friedl-part1.rar

    如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MySQL、VB.NET和C#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本...

    正则表达式工具 for mac

    "正则表达式工具 for mac" 是一款专为Mac用户设计的高效软件,它允许用户在多种语言环境中如PHP、JavaScript、Python、Golang、Java、Ruby、Perl以及C#中编写和测试正则表达式。 这款工具的特色在于其多语言支持,...

Global site tag (gtag.js) - Google Analytics