发布于 2016-01-28 02:56:38 | 122 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Ruby教程,程序狗速度看过来!

Ruby编程语言

Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。


复杂的正则表达式很难构建,甚至很难阅读。Ruby的Re模块可以帮助你利用简单的表达式构建复杂的正则表达式
例如,考虑下面的匹配日期的正则表达式:
/\A((?:19|20)[0-9]{2})[\- \/.](0[1-9]|1[012])[\- \/.](0[1-9]|[12][0-9]|3[01])\z/

使用Re之后,正则表达式可以短小易读的表达式为基础,一步一步地构建出来,例如:
require 're'

include Re

delim                = re.any("- /.")century_prefix       = re("19") | re("20")under_ten            = re("0") + re.any("1-9")ten_to_twelve        = re("1") + re.any("012")ten_and_under_thirty = re.any("12") + re.any("0-9")thirties             = re("3") + re.any("01")

year = (century_prefix + re.digit.repeat(2)).capture(:year)month = (under_ten | ten_to_twelve).capture(:month)day = (under_ten | ten_and_under_thirty | thirties).capture(:day)

date = (year + delim + month + delim + day).all


虽然代码量增加了,但是每个部分都很短小,也很容易验证。同时,捕获的部分可以通过相应的变量名访问:
result = date.match("2009-01-23")result[:year]      # => "2009"result[:month]     # => "01"result[:day]       # => "23"

注意,用Re构建正则表达式会很慢,所以推荐创建正则表达式并复用。匹配的时候,性能和原生的正则表达式很接近。(额外的方法调用和创建Re::Result以返回匹配结果影响一点点性能。)如果你需要追求极致的性能,你仍然可以使用Re来构建正则表达式,然后抽取出原始的Ruby Regexp来匹配。这样的话,性能就和使用原生正则表达式一样了。

例如,构建匹配电话号码的正则表达式:

PHONE_RE = re.digit.repeat(3).capture(:area) +               re("-") +               re.digit.repeat(3).capture(:exchange) +               re("-") +               re.digit.repeat(4)).capture(:subscriber)

然后抽取出原始的正则对象,直接使用它来匹配:
PHONE_REGEXP = PHONE_RE.regexp

if PHONE_REGEXP =~ string
  # blah blah blah
end



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务