一步一步學Ruby 九 Ruby正規表示式(上)

2021-09-22 09:08:03 字數 1728 閱讀 8696

ruby的正規表示式以"//"作為構造方法。表示式返回乙個regexp的物件。

一般規則:

/a/匹配字元a。    

/\?/匹配特殊字元?。特殊字元包括^, $, ? , ., /, \, [, ], , (, ), +, *.    

.匹配任意字元,例如/a./匹配ab和ac。    

/[ab]c/匹配ac和bc,之間代表範圍。例如:/[a-z]/ , /[a-za-z0-9]/。    

/[^a-za-z0-9]/匹配不在該範圍內的字串。    

/[\d]/代表任意數字

/[\w]/代表任意字母,數字或者_

/[\s]/代表空白字元,包括空格,tab和換行。    

/[\d]/,/[\w]/,/[\s]/均為上述的否定情況。 

高階規則:

?代表0或1個字元。/mrs?\.?/匹配"mr","mrs","mr.","mrs."。 

*代表0或多個字元。/hello*/匹配"hello","hellojack"。 

+代表1或多個字元。/a+c/匹配:"abc","abbdrec"等等。 

/d/匹配3個數字。 

/d/匹配1-10個數字。 

/d/匹配3個數字以上。 

/([a-z]\d)/匹配首位是大寫字母,後面4個是數字的字串。

下圖匹配的是:m後面是字元r, 後面是0或1個字元s, 在後面是0或1個字元"." , 匹配mr、mrs、mr.、mrs.

下面可以匹配

正規表示式操作

string和regexp均支援=~和match 2個查詢匹配方法

可以看出,如果能夠匹配,=~返回匹配的字串位置,而match返回乙個matchdata物件。如果不匹配返回nil。 

matchdata可以取出其中符合各個子匹配的內容。看下面的例子: 

m[0]返回匹配主表示式的字串

下面的方法是等同的: 

m[n] == m.captures[n]

ruby也自動的為我們填寫了一些全域性變數,它們以數字做名: $1,$2,等等,$1包含的是正規表示式中從左側開始的第一對小括號內的子模式所匹配的字串

我們看出匹配時,是從外到內,從左到右的順序

其它的一些方法

王德水

一步一步學Ruby 一 Ruby介紹

文章摘要 ruby是如何來的 ruby 的發明者松本行弘 yukihiro matz matsumoto,混合了他喜歡的語言 perl smalltalk eiffel ada 和 lisp 產生了一種具有函式式及指令程式設計特性的新語言。他常說,他是 試著讓 ruby 更自然,而不是簡單,就像生活...

一步一步學Ruby 一 Ruby介紹

文章摘要 ruby是如何來的 ruby 的發明者松本行弘 yukihiro matz matsumoto,混合了他喜歡的語言 perl smalltalk eiffel ada 和 lisp 產生了一種具有函式式及指令程式設計特性的新語言。他常說,他是 試著讓 ruby 更自然,而不是簡單,就像生活...

一步一步學Ruby 十二 Ruby類

一 類的定義 類的例項方法 二 特定物件的方法 在ruby裡,我們可以為乙個物件單獨定義方法 三 重定義方法 從下面 可以看出,後面的定義會覆蓋前面的定義 四 重新開啟類 ruby裡我們可以再開啟乙個類,向這類新增方法,有點像c 裡的分部類,但不用加特別標記.我們一般不要拆開類的定義,因為那樣不好理...