`
秦朝古月
  • 浏览: 223780 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读《The Ruby Way》之正则表达式

    博客分类:
  • Ruby
阅读更多
世界杯开幕了,看了三场球。南非1-1墨西哥,法国0-0乌拉圭,韩国2-0希腊。看了法国的表现,就知道为什么会输给中国了,而看了韩国队的表现,不得不担心中国队的差距。无论如何祝福中国队,虽然讨厌韩国,但也祝福包括韩日在内的亚洲球队能走得更远。

锚(anchor)。锚不与字符串开头与末尾匹配,而与行首和行尾匹配。
string = "abc\ndef\nghi"
/^def/ =~ string    # 4
/def$/ =~ string    # 4

而\A 和\Z 匹配字符窜本身的开头和末尾。\Z 可以匹配最后一个换行符,而\z 不可以。
string = "abc\ndef\nghi"
/\Adef/ =~ string    # nil
/def\Z/ =~ string    # nil
/\Aabc/ =~ string    # 0
/ghi\Z/ =~ string    # 8
str2 << "\n"
/ghi\Z/ =~ string    # 8
/ghi\z/ =~ string    # nil

\b 匹配单词边界,\B 匹配非单词边界的位置。
str = "this is a test"
str.gsub(/\b/, "|")     # "|this| |is| |a| |test|"
str.gsub(/\B/, "-")     # "t-h-i-s i-s a t-e-s-t"

量词符
/x{5}/       # 5个x
/x{5,7}/     # 5到7个x
/x{,8}/      # 最多8个x,会有警告
/x{3,}/      # 最少3个x

贪婪
str = "Where the sea meets the moon-blanch'd land,"
match = /.*?the/.match(str)
p match[0]       # 结果是Where the sea meets the,而不是Where the。

正负预查
s1 = "New World Dictionary"
s2 = "New World Symphony"
s3 = "New World Order"
reg = /New World(?= Dictionary| Symphony)/ # 正预查
m1 = reg.match(s1)
m1.to_a[0]            # "New World"
m2 = reg.match(s2)
m2.to_a[0]            # "New World"
m3 = reg.match(s3)    # nil
reg2 = /New World(?! Symphony)/            # 负预查
m1 = reg2.match(s1)
m1.to_a[0]            # "New World"
m2 = reg2.match(s2)    # nil
m3 = reg2.match(s3)
m3.to_a[0]            # "New World"

非捕获组
str = "a123b45c678"
str.sub(/(a\d+)(?:b\d+)(c\d+)/, "1st=\\1, 2nd=\\2, 3rd=\\3")
# "1st=a123, 2nd=c678, 3rd="

内嵌子表达式。可以用来防止贪婪。
str = "abccccdef"
re1 = /(abc*)cdef/
re2 = /(?>abc*)cdef/
re1 =~ str       # 0
re2 =~ str       # nil,子表达式使用了全部的c
分享到:
评论

相关推荐

    正则表达式经典实例

    学习更高深的正则表达式特性中的微妙之处; 理解在不同语言中正则表达式的API、语法和行为之间的区别; 创建更好的正则表达式来满足个性化的需求。 使用8种编程语言的详细解决方案,包括一个正则表达式简明教程

    精通正则表达式 中英文

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

    《正则表达式经典实例》扫描版

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

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

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

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

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

    正则表达式完整高清版

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

    正则表达式经典实例.pdf

    对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。  本书的读者对象是对...

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

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

    ruby正则表达式

    比较齐全的正则表达式,完全可以满足你平时的各种需要

    精通正则表达式(第3版) 英文版

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

    正则表达式框架OgreKit.zip

    OgreKit 是一款为 Cocoa 开发的正则表达式框架,该框架提供了一个与 Ruby 使用的相同的正则表达式引擎与一个高层次的 GUI 查找面板。可以在这里获取源码。 OgreKit 使用 Oniguruma/Onigmo 正则表达式引擎。...

    Ruby中使用正则表达式的基础指引

    正则表达式的内建支持通常只限于脚本语言如Ruby,Perl和awk等,这是一个耻辱:尽管正则表达式很神秘,但它是一个强大的文本处理工具。通过内建而不是通过程序库接口来支持它,有很大的不同。 正则表达式只是一种指定...

    ruby正则表达式规则

    ruby正则表达式规则 ruby中经常用到的正则表达式使用方法

    精通正则表达式~~~

    精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...

    正则表达式经典实例.(美)高瓦特斯,(美)利维森.pdf

    本书讲解了基于8种常用的...对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,本书给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。

    正则表达式经典实例中文版 (美)高瓦特斯

    《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。  《正则表达式经典实例》主要包括以下...

Global site tag (gtag.js) - Google Analytics