Ruby奇特變量特殊性質(zhì)講解
Ruby語言作為一種新型的編程語言,具有很多和其他編程語言不同的特有的性質(zhì)。在這里我們就為大家介紹一些Ruby奇特變量的相關(guān)概念。#t#
以前ruby從perl中借鑒了很多東西,Ruby奇特變量其中之一就是全局的魔法變量,在這些變量中,估計(jì)沒有沒有哪個(gè)有$_更奇特。比如,方法gets有這個(gè)一個(gè)效果:
在返回剛讀到的行數(shù)據(jù)的同時(shí),也把這行的數(shù)據(jù)存入$_.如果你調(diào)用print方法而沒有帶參數(shù),那么它將會(huì)打印出$_中的內(nèi)容。如果你在寫if或者while語句時(shí),僅將一個(gè)正則表達(dá)式作為條件,那么這個(gè)正則表達(dá)式會(huì)自動(dòng)去匹配$_.這樣的話,我們可以寫出下面這個(gè)短小精悍的程序來實(shí)現(xiàn)在所有的行中找出那些包含郵箱地址的行。
- while gets
- if /[a-zA-Z0-9\.\-_]
@[a-zA-Z0-9\.\-_]/- end
- end
但是,對(duì)于Ruby來說,這樣還不夠簡潔,我們可以這樣
- ARGF.each {|line| print line if
line =~ /[a-zA-Z0-9\.\-_]@[a-zA-Z0-9\.\-_]/ }
呵呵,怎么樣,吃驚了吧,一條語句就搞定了,Ruby奇特變量就是高效!
另外還有一個(gè)全局變量,$. 里面的內(nèi)容是文件的總行數(shù)
還有其他的全局變量$&,&`,&' 這幾個(gè)全局變量分別用于正則表達(dá)式中。
當(dāng)你用match或者=~去匹配一個(gè)字符串和一個(gè)正則表達(dá)式時(shí),結(jié)果是:$&存放字符串中匹配正則表達(dá)式的部分,$`存放字符串中$&部分的前一個(gè)字符串,$'存放字符串中$&部分的后一個(gè)字符串。
比如
- str="good day! woodfish1988@
163.com It's a email"- reg=/[a-zA-Z0-9\-\._]+@
[a-zA-Z0-9\-\._]+/- reg=~str
- puts $`,$&,$'
結(jié)果是
good day!
woodfish1988@163.com
It's a email
同時(shí),在匹配后全局標(biāo)量$1..$9里面存放的匹配于正則表達(dá)式中的各個(gè)小內(nèi)容(也就是由括號(hào)括起來的內(nèi)容,具體請(qǐng)看正則表達(dá)式教程)
例如:
- code="<a href='http://
www.google.com'>Google</a>"- reg=/<a href='(.+)'>(.+)<\/a>/
- reg=~code
- puts $1,$2
結(jié)果是
http://www.google.com
Google
以上就是對(duì)Ruby奇特變量的具體介紹。