• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ruby中的奇特变量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
以前ruby从perl中借鉴了很多东西,其中之一就是全局的魔法变量,在这些变量中,估计没有没有哪个有$_更奇特。比如,方法gets有这个一个效果:在返回刚读到的行数据的同时,也把这行的数据存入$_.如果你调用print方法而没有带参数,那么它将会打印出$_中的内容。如果你在写if或者while语句时,仅将一个正则表达式作为条件,那么这个正则表达式会自动去匹配$_.这样的话,我们可以写出下面这个短小精悍的程序来实现在所有的行中找出那些包含邮箱地址的行。
1while gets
2  if /[a-zA-Z0-9\.\-_]@[a-zA-Z0-9\.\-_]/
3    print
4  end
5end
6
但是,对于Ruby来说,这样还不够简洁,我们可以这样
ARGF.each {|line| print line if line =~ /[a-zA-Z0-9\.\-_]@[a-zA-Z0-9\.\-_]/ }


呵呵,怎么样,吃惊了吧,一条语句就搞定了,ruby就是高效!

另外还有一个全局变量,$.  里面的内容是文件的总行数

还有其他的全局变量$&,&`,&'  这几个全局变量分别用于正则表达式中。

当你用match或者=~去匹配一个字符串和一个正则表达式时,结果是:$&存放字符串中匹配正则表达式的部分,$`存放字符串中$&部分的前一个字符串,$'存放字符串中$&部分的后一个字符串。

比如


str="good day! [email protected] It's a email"
reg
=/[a-zA-Z0-9\-\._]+@[a-zA-Z0-9\-\._]+/
reg
=~str
puts $`
,$&,$'

 

结果是

good day!
[email protected]
 It's a email

同时,在匹配后全局标量$1..$9里面存放的匹配于正则表达式中的各个小内容(也就是由括号括起来的内容,具体请看正则表达式教程)

例如:


code="<a href='http://www.google.com'>Google</a>"
reg
=/<a href='(.+)'>(.+)<\/a>/
reg
=~code
puts $
1,$2

 

结果是

http://www.google.com
Google


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ruby之旅(12)ruby中的迭代器发布时间:2022-07-14
下一篇:
为什么以及如何从Ruby切换到Python发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap