Ruby Regexp MatchData
=~ Operator
回傳比對的位置到的起始位置,沒有比對到則回傳 nil
1 | /cat/ =~ 'hiakiicat' # => 6 |
match method
有 match 到會回傳 MatchData,如果沒有 match 到則會回傳 nil。
1 | m = /akii(.+)$/.match('hiakiicat') |
括號起來的資料 (...)
才會另外存成一個值。如果不想要另外存成一個值,可以在括號裡面打 (?:...)
。
獲取資料:
m[0]
為 match 到的所有資料。m[1]
為第一個括號裡面所比對到的資料,以此類推。
1 | m[0] # => "akiicat" |
使用 captures 的話,可以以 array 的形式拿到括號內的資料。
1 | m.captures |
獲得起始位置和結束位置:
1 | m.begin(0) # => 2 |
其他用法:
1 | m.length # => 2 |
範例:
1 | if m = /akii(.+)$/.match('hiakiicat') |
或是使用 safe navigation operator &.
的寫法,如果是 nil 則不會繼續往下執行之後的動作。
1 | /akii(.+)$/.match('hiakiicat')&.[](1) # => "cat" |