说起Ruby当然要提起他的正则表达式机制,正则表达式作为一个强大的匹配语言已经越来越多的使用到不同的领域当中,从字符串验证,匹配,到网页抽取等。虽然有些人诟病与正则表达式的匹配效率,但是考虑到正则的强大匹配能力也就无所谓了。
这里就不详细介绍正则表达式的语法了,该语法在百度,google之类的搜索中一搜一大堆。
说起ruby的正则不就不能不说起ruby的=~和match两种匹配方式,我们还是用实例来说明一下这两种匹配方式的区别吧。
先来说一说=~的用法吧
message = "afhadhffkdf414j"
regex=/[a-z](\d{3})[a-z]/
puts regex=~message
在ruby当中是用//来表示正则匹配语句的。大家可以运行一下,上面的语句是匹配三个数字两边都是小写字母的一个字符串。我们运行上面代码,将会出现结果10.你一定很奇怪,为什么会出现10这个结果,这就是=~的魅力,他是将匹配结果的首次出现位置打印出来。
那下面我们来看看match吧
message = "afhadhffkdf414j"
regex=/[a-z](\d{3})[a-z]/
puts regex.match(message)
我们来看看输出结果吧:f414j。该字符串表示的正则语句匹配的所有符合规则的结果集。不知道大家注意到没,我们在正则里面用到了括号,我们希望抽取出三个数字就可以了。当然这也很简单,我们只需要在上面的代码当中稍作修改即可
message = "afhadhffkdf414j"
regex=/[a-z](\d{3})[a-z]/
regex.match(message)
puts $1
结果自然是414.为什么要使用$1而不是$0呢,我们看看$0的结果吧C:/Users/Administrator/Documents/NetBeansProjects/RubyApplication1/lib/regex.rb它是输出的该对象信息。
下面又出现了一个新的情况,假设一个字符串当中有很多符合规则的信息怎么办呢。上面的语句只能匹配出最先找到的结果,而我们需要把所有的结果都打印出来怎么办呢?刚开始我受java的影响,认为match的结果会是一个集合,所以怎么考虑也没有整出来。后来发现有一个scan方法。代码如下图所示
message = "afhadhffkdf414j9tr3j43i3433094jwoert223jwew123dfdf"
regex=/[a-z](\d{3})[a-z]/
message.scan(regex).each { |m| puts "The result is #{m[0]}" }
很简单,结果就是
The result is 414
The result is 223
The result is 123
怎么样,很方便吧。很简单的就把所有的匹配结果都抽取出来了。好了,下班了。回家吃饭了
分享到:
相关推荐
ruby正则表达式规则 ruby中经常用到的正则表达式使用方法
比较齐全的正则表达式,完全可以满足你平时的各种需要
在编写puppet的pp文件中,会用到很多ruby的正则表达式,常用的正则如下: 正则表达式: [codesyntax lang=”ruby”] {}: 重复次数(如 {4}表示前面的会重复出现恰好4次) {m,n}: 前面元素最少出现m次,最多出现n次 []...
我们再看一个更有趣的程序.这次我们来测试一个字符串是否和一个由简明模式(concise pattern)编码产生的描述相匹配. 在这些模式(pattern)里,一些字符或字符组合都有独特的意义,包括: 代码如下:[] 范围描述符 ...
用于从字符串列表创建紧凑的,非回溯的正则表达式。 安装 将此行添加到您的应用程序的Gemfile中: gem 'list_matcher' 然后执行: $ bundle 或将其自己安装为: $ gem install list_matcher 概要 require '...
一个漂亮的正则表达式,用于查找和提取这些文件中的相对URL
Ruby表情符号正则表达式 :gem_stone: 一组Ruby正则表达式,用于匹配Unicode Emoji符号。背景这是基于 Javascript软件包的出色工作。 emoji-regex是根据Unicode联盟的数据巧妙地组合而成的。 本文提供的正则表达式...
这是将Ruby的正则表达式转换为JavaScript风格的Ruby宝石。 与,它可以处理Ruby的正则表达式功能,并且如果仍然存在任何不兼容之处,它会返回以表明它们。 这意味着您将有更好的机会来翻译正则表达式,并且如果...
RubyRegex是Ruby中很好的正则表达式集合 常用表达 RubyRegex::Url RubyRegex::Domain RubyRegex::Email RubyRegex::Username RubyRegex::USSocialSecurity RubyRegex::GeneralPostalCode RubyRegex::ZIPCode ...
正则表达式的内建支持通常只限于脚本语言如Ruby,Perl和awk等,这是一个耻辱:尽管正则表达式很神秘,但它是一个强大的文本处理工具。通过内建而不是通过程序库接口来支持它,有很大的不同。 正则表达式只是一种指定...
对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。...
OgreKit 是一款为 Cocoa 开发的正则表达式框架,该框架提供了一个与 Ruby 使用的相同的正则表达式引擎与一个高层次的 GUI 查找面板。可以在这里获取源码。 OgreKit 使用 Oniguruma/Onigmo 正则表达式引擎。...
《正则指引》针对作者在开发中遇到的实际问题,以及其他开发人员咨询的问题,总结出一套使用正则表达式解题的办法,并通过具体的例子指导读者拆解、分析问题。全书分为三大部分:第一部分主要讲解正则表达式的基础...
主要介绍了Ruby中正则表达式对字符串的匹配和替换操作,包括对结果分组和一些特殊全局变量的介绍,需要的朋友可以参考下
《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。 此书为英文版,因为中文...