詳細(xì)介紹Ruby中的正則表達(dá)式
正則表達(dá)式是一種特殊序列的字符,它通過使用有專門語法的模式來匹配或查找其他字符串或字符串集合。
語法
正則表達(dá)式從字面上看是一種介于斜杠之間或介于跟在 %r 后的任意分隔符之間的模式,如下所示:
/pattern/ /pattern/im # 可以指定選項(xiàng) %r!/usr/local! # 一般的分隔的正則表達(dá)式 實(shí)例 #!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats" end if ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs" end
這將產(chǎn)生以下結(jié)果:
Line1 contains Cats
正則表達(dá)式修飾符
正則表達(dá)式從字面上看可能包含一個(gè)可選的修飾符,用于控制各方面的匹配。修飾符在第二個(gè)斜杠字符后指定,如上面實(shí)例所示。下標(biāo)列出了 可能的修飾符:
就像字符串通過 %Q 進(jìn)行分隔一樣,Ruby 允許您以 %r 作為正則表達(dá)式的開頭,后面跟著任意分隔符。這在描述包含大量您不想轉(zhuǎn)義的斜杠字符時(shí)非常有用。
# 下面匹配單個(gè)斜杠字符,不轉(zhuǎn)義 %r|/| # Flag 字符可通過下面的語法進(jìn)行匹配 %r[</(.*)>]i
正則表達(dá)式模式
除了控制字符,(+ ? . * ^ $ ( ) [ ] { } | \),其他所有字符都匹配本身。您可以通過在控制字符前放置一個(gè)反斜杠來對(duì)控制字符進(jìn)行轉(zhuǎn)義。
下表列出了 Ruby 中可用的正則表達(dá)式語法。
搜索和替換
sub 和 gsub 及它們的替代變量 sub! 和 gsub! 是使用正則表達(dá)式時(shí)重要的字符串方法。
所有這些方法都是使用正則表達(dá)式模式執(zhí)行搜索與替換操作。sub 和 sub! 替換模式的第一次出現(xiàn),gsub 和 gsub! 替換模式的所有出現(xiàn)。
sub 和 gsub 返回一個(gè)新的字符串,保持原始的字符串不被修改,而 sub! 和 gsub! 則會(huì)修改它們調(diào)用的字符串。
下面是一個(gè)實(shí)例:
#!/usr/bin/ruby phone = "2004-959-559 #This is Phone Number" # 刪除 Ruby 的注釋 phone = phone.sub!(/#.*$/, "") puts "Phone Num : #{phone}" # 移除數(shù)字以外的其他字符 phone = phone.gsub!(/\D/, "") puts "Phone Num : #{phone}"
這將產(chǎn)生以下結(jié)果:
Phone Num : 2004-959-559 Phone Num : 2004959559
下面是另一個(gè)實(shí)例:
#!/usr/bin/ruby text = "rails are rails, really good Ruby on Rails" # 把所有的 "rails" 改為 "Rails" text.gsub!("rails", "Rails") # 把所有的單詞 "Rails" 都改成首字母大寫 text.gsub!(/\brails\b/, "Rails") puts "#{text}"
這將產(chǎn)生以下結(jié)果:
Rails are Rails, really good Ruby on Rails
相關(guān)文章
PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not
這篇文章主要給大家介紹了關(guān)于PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not?found錯(cuò)誤的解決辦法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02python實(shí)現(xiàn)跨年表白神器--你值得擁有
這篇文章主要介紹了python實(shí)現(xiàn)跨年表白神器的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-01-01numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete
這篇文章主要介紹了numpy如何刪除矩陣中的部分?jǐn)?shù)據(jù)numpy.delete問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python中拆分具有多個(gè)分隔符的字符串方法實(shí)例
str.split()是Python中字符串類型的一個(gè)方法,可以用來將字符串按照指定的分隔符分割成多個(gè)子字符串,這篇文章主要給大家介紹了關(guān)于Python中拆分具有多個(gè)分隔符的字符串的相關(guān)資料,需要的朋友可以參考下2023-04-04Flask與數(shù)據(jù)庫的交互插件Flask-Sqlalchemy的使用
在構(gòu)建Web應(yīng)用時(shí),與數(shù)據(jù)庫的交互是必不可少的部分,本文主要介紹了Flask與數(shù)據(jù)庫的交互插件Flask-Sqlalchemy的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03構(gòu)建高效的python requests長(zhǎng)連接池詳解
這篇文章主要介紹了構(gòu)建高效的python requests長(zhǎng)連接池詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Django使用Channels實(shí)現(xiàn)WebSocket的方法
WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通訊的協(xié)議。WebSocket允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。這篇文章主要介紹了Django使用Channels實(shí)現(xiàn)WebSocket,需要的朋友可以參考下2019-07-07