ruby中的奇特變數

來源:互聯網
上載者:User
以前ruby從perl中借鑒了很多東西,其中之一就是全域的魔法變數,在這些變數中,估計沒有沒有哪個有$_更奇特。比如,方法gets有這個一個效果:在返回剛讀到的行資料的同時,也把這行的資料存入$_.如果你調用print方法而沒有帶參數,那麼它將會列印出$_中的內容。如果你在寫if或者while語句時,僅將一個Regex作為條件,那麼這個Regex會自動去匹配$_.這樣的話,我們可以寫出下面這個短小精悍的程式來實現在所有的行中找出那些包含郵箱地址的行。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就是高效!

另外還有一個全域變數,$.  裡面的內容是檔案的總行數

還有其他的全域變數$&,&`,&'  這幾個全域變數分別用於Regex中。

當你用match或者=~去匹配一個字串和一個Regex時,結果是:$&存放字串中匹配Regex的部分,$`存放字串中$&部分的前一個字串,$'存放字串中$&部分的後一個字串。

比如

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

 

結果是

good day!
woodfish1988@163.com
 It's a email

同時,在匹配後全域標量$1..$9裡面存放的匹配於Regex中的各個小內容(也就是由括弧括起來的內容,具體請看Regex教程)

例如:

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

 

結果是

http://www.google.com
Google

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.