`
hideto
  • 浏览: 2690700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

每天一条Ruby小道之正则表达式

    博客分类:
  • Ruby
阅读更多
每天一条Ruby小道之正则表达式

孟岩的《精通正则表达式》书评里讲到:
“正则表达式具有伟大技术发明的一切特点,它简单,优美,功能强大,妙用无穷”

其实很多语言都内置正则表达式支持,普遍的跟几乎所有手机都支持摄像头似的

好了,就让我们来领略Ruby下正则表达式的威力吧

1,正则表达式的表达形式
1)使用//分隔,如/Ruby/,/^abc/
2)使用%r加分隔符,如%r(xyz$),%r{[0-9]*},%r$[Rr]uby$

2,修饰符
1)/i忽略大小写
2)/m让“.”可以匹配换号符“\n”
3)/x允许正则表达式里有空格和注释
4)/o使得任何在正则表达式字面量中使用#{...}替代时只处理一次,而默认是每次生成Regexp对象时都处理#{...}替代的
a = "abc"
regexp = /[0-9]#{a}[a-z]/


3,正则表达式里使用的常用符号
1)^
一行的开始
2)$
一行的结束
3).
任何字符(除了换行)
4)\w
词语(数字,字母或下划线)
5)\W
非词语
6)\s
空格字符(空格,tab,换行)
7)\S
非空格字符
8)\d
数字(等同于[0-9])
9)\D
非数字
10)\A
字符串的开始
11)\Z
字符串的结束或换行
12)\z
字符串的结束
13)\b
词语分界线(仅仅在[]外面时)
14)\B
非词语分界线
15)\b
退格(仅仅在[]里面时)
16)[]
集合中的任何单字符
17)*
0个或多个前面的表达式
18)*?
0个或多个前面的表达式(non-greedy)
19)+
1个或多个前面的表达式
20)+?
1个或多个前面的表达式(non-greedy)
21){m,n}
m到n个前面的表达式实例
22){m,n}?
m到n个前面的表达式实例(non-greedy)
23)?
0个或1个前面的表达式
24)|
二选一
25)(?= )
匹配后面的表达式
26)(?! )
不匹配后面的表达式
27)()
分组子正则表达式
28)(?> )
嵌入子正则表达式
29)(?: )
不捕获组
30)(?imx)和(?-imx)
打开或关闭i,m,x选项
31)(?imx:expr)或(?-imx:expr)
为表达式expr打开或关闭i,m,x选项
32)(?# )
注释

4,编译正则表达式
我们可以使用Regexp.compile方法来“编译”正则表达式,实际上它是Regexp.new方法的别名。
compile方法的第一个参数可以是字符串或正则表达式,正则表达式的选项会在编译时丢掉。
compile方法的第二个参数为常量Regexp::EXTENDED,Regexp::IGNORECASE,Regexp::MULTILINE之一。
compile方法的第三个参数指示语言,它允许多字节字符支持。
expr1 = Regexp.compile("#foo.*")  # => /^foo.*/
expr2 = Regexp.compile(/bar$/i)  # => /bar/ (i被忽略)
expr3 = Regexp.compile("^foo", Regexp::MULTILINE || Regexp::IGNORECASE)
expr4 = Regexp.compile(/bar/, Regexp::IGNORECASE, "u")

第三个参数:
"N"或"n"表示None
"E"或"e"表示EUC
"S"或"s"表示Shift-JIS
"U"或"u"表示UTF-8

一般情况下使用正则表达式字面量即可: expr = /^foo.*$/i

5,[]详解
匹配[]内字符列表中的一个单字符:
/[aeiou]/  # 匹配a,e,i,o,u中的一个字符

在[]内,\n仍然有意义,但.和?没有特殊的意义了:
/[.\n?]/  # 匹配.,换行,?中的一个字符

如果^为[]里第一个字符,则否定后面所有的字符列表:
/[^aeiou]/  # 任何除了a,e,i,o,u的字符

-用来表示字符范围:
/[a-mA-M]/  # 任何a到m或A到M的字符
/[^a-mA-M]/  # 任何除了a到m和A到M的字符

如果-出现在[]中第一个或最后一个字符,或^、[用在中间,则它们失去了上面所说的意义,但]需要escape:
/[-^[\]]/  # 匹配-,^,[,]中的一个字符

命名字符:
/[[:digit:]]/  # 匹配数字
/[[:print:]]/  # 匹配可打印字符
/[[:alpha:]]/  # 匹配字母
/[[:^alpha:]]/ # 匹配非字母


6,使用/x来让正则表达式跨行和加注释
当正则表达式很复杂时,使用/x来跨行和加注释可以获得更好的可读性:
regex = / ^                     # Beginning of string
          ((No\.?)\s+)?         # Optional: No[.]
          \d+ \s+               # Digits and spacing
          ((\W|[.'-])+          # Street name... may be
           \s*                  #   multiple words.
          )+
          (,\s*                 # Optional: Comma etc.
           (Apt\.?|Suite}\#)    # Apt[.], Suite, #
           \s+                  # Spacing
           (\d+|[A-Z])          # Numbers or single letter
          )?
          $                     # End of string
        /x


7,Ruby的新正则表达式引擎Oniguruma
更好的支持国际化,并且添加了许多强大的特性,license也限制更少,but还没有完全集成到Ruby标准发布版本里

正则表达式是上世界90年代随着Perl走红而走红的,如今它已经成为现代编程语言不可或缺的一部分
合理的使用正则表达式,会让我们事半功倍
本章其他小节讲述了一些Regexp类的api,这里就不介绍了
分享到:
评论

相关推荐

    the-book-of-ruby-正则表达式

    The Book Of Ruby Ruby 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式

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

    《精通正则表达式(第3版)》是讲解正则表达式的经典之作。《精通正则表达式(第3版)》主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了在Perl、Java、.NET、PHP中正则...

    Ruby中的正则表达式及其应用实例

    内容概要:本文详细介绍了Ruby中正则表达式的使用方法。从基础语法入手讲解了正则表达式的组成成分,演示了各种匹配和搜索的功能,进一步探讨了正则表达式标志和高级特性,并且提供了实际案例来提升代码质量和工作...

    精通正则表达式 中英文

    该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。  ——《程序员》杂志技术主编 孟岩  本书讲解正则...

    正则表达式.pdf

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

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

    RegexBuddy是这类工具的代表之一,它提供了丰富的功能来辅助正则表达式的创建和测试。RegexBuddy.chm是一个帮助文件,包含详细的使用指南和功能介绍,用户可以通过查阅这个文件来了解如何操作和利用这个工具。...

    精通正则表达式电子书

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

    正则表达式经典实例

    ### 正则表达式经典实例 #### 一、概述 正则表达式是计算机科学领域中一种用于描述字符串模式的强大工具。...正则表达式的强大功能使其成为任何开发者的必备技能之一,而这本书正是你掌握这项技能不可或缺的宝典。

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

    该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。 ——《程序员》杂志技术主编孟岩 《精通正则表达式...

    正则表达式完整高清版

    全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍...

    正则表达式入门指导.ppt

    正则表达式(Regular Expression)是一种强大的文本处理工具,它是一种模式匹配语言,用于在文本中查找、替换或提取符合特定规则的字符串。在多种编程语言中,如Perl、Java、JavaScript、C#、PHP、Python、Ruby、Tcl、...

    ruby正则表达式

    Ruby中的正则表达式是一种强大的文本处理工具,用于在字符串中查找、替换或提取符合特定模式的文本。正则表达式通常用`//`来定义,并返回一个`RegExp`对象。接下来,我们将深入探讨Ruby正则表达式的主要知识点。 ##...

    正则表达式工具 for mac

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

    [精通正则表达式(第三版) 中英文 PDF 高清

    正则表达式是计算机科学中的一个重要概念,它是处理字符串的一种强大工具,广泛应用于文本搜索、替换、验证等场景。随着编程的普及和技术的快速发展,正则表达式的重要性日益凸显,越来越多的开发者意识到了掌握它的...

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

    本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、 Java、.NET、PHP中的用法。 本书自第1版开始着力于教会读者...

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

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

Global site tag (gtag.js) - Google Analytics