美文网首页
ruby的正则表达式

ruby的正则表达式

作者: kamionayuki | 来源:发表于2015-05-26 20:24 被阅读113次

http://www.w3cschool.cc/ruby/ruby-regular-expressions.html
要对一个字符串进行全部匹配,比如“bbbb"匹配/bbb/,结果应该返回2次匹配。
而当用"bbbb".scan(/bbb/)时,只能匹配到1次。
因为在匹配了第一个bbb后,"bbbb"就会把bbb从字符串去去除,这样,剩下的只有”b"了,所以就不能继续匹配/bbb/了.
那么,应该怎么去匹配呢?最开始我是这样写的:

for i in 0.."bbbb".size-1    
  "bbbb"[i,"bbb".size] == "bbb"
end

这样肯定不行。不太符合ruby的精神,所以找了一下,还真有解决方案,如下 :
"bbbb".scan(/(?=bbb)/),这样能匹配到2次。但是返回的是["",""]
"bbbb".scan(/bbb/)返回的是["bbb"].
那么/(?=bbb)/表示什么呢?
我个人理解是:当找到第一个匹配字符串的位置时,认为这个位置后面也会有匹配的字符串,这样的话,就有点类似于最开始写的for循环了。。


ruby一直被认为是处理字符串的神器,如能利用正则表达式和字符串的方法,代码会变得优雅简洁。参考这个帖子即可,写的非常详细。
http://blog.csdn.net/menxu_work/article/details/9134447
在这里要特意说明一下scan方法有以下的代码:

TESTSTR = "IIVIIIVIVVIIV"
regexp1 = Regexp.new('IVI|VI|IV|III|V')
regexp2 = Regexp.new('IV|VI|IVI|III|V')
p a = TESTSTR.scan(regexp1) #=>["IVI", "IVI", "V", "VI", "IV"]
p b = TESTSTR.scan(regexp2) #=>["IV", "III", "VI", "V", "VI", "IV"]

可以看到,当正则表达式中有多个可以匹配的项时,仅仅是变换了第1和第3个位置,匹配出来的结果是不一样的。所以scan的匹配是按匹配项的顺序来进行的。当scan匹配到一个子字符串时,会把该子字符串放入到一个数组中,同时在原字符串中把匹配的子字符串删除掉。我们可以利用按顺序匹配多个匹配项的特性,只要排列好正则表达式中多个匹配项的顺序,可以事半功倍的达到目的。

相关文章

  • 转:Ruby笔记–正则表达式

    Ruby笔记–正则表达式 Ruby对正则表达式支持非常好,下面将对我经常使用到的做一个总结,包括Ruby中正则的写...

  • ruby 中的正则表达式

    摘录几个 ruby 正则表达式 You Can't Parse HTML With Regex. 新添:

  • Ruby 正则表达式

    模式与匹配 创建正则表达式对象的语法如下: 例如, 匹配"Ruby"这个字符串的正则表达式为: 把希望匹配的内容直...

  • ruby的正则表达式

    http://www.w3cschool.cc/ruby/ruby-regular-expressions.htm...

  • Ruby 正则表达式语法

  • Ruby 正则表达式实例

  • Cocoapods笔记

    一、安装 查看ruby的版本 ruby -v 查看ruby的源 ruby source -l 切换ruby的源...

  • Ruby 正则表达式的 o 选项

    如果在正则表达式中指定了 o 选项,那么这个此表达式中的任意 #{...} 替换仅在第一次求解它的时候执行替换;否...

  • Ruby基础学习笔记

    目录 Ruby的基本概念Ruby的控制语句Ruby的循环Ruby的数组与散列 Ruby的基本概念 运行Ruby的方...

  • 工作优化

    1.写代码中的打印花点心思,使其容易发现问题。 2.熟悉Ruby对目录和文件的操作,以及各种正则表达式。和操作Ex...

网友评论

      本文标题:ruby的正则表达式

      本文链接:https://www.haomeiwen.com/subject/dzerqttx.html