多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

ruby教程

Ruby 正則表達式

閱讀 (2337)

Ruby 正則表達式

正則表達式是一種特殊序列的字符,它通過使用有專門語法的模式來匹配或查找其他字符串或字符串集合。

語法

正則表達式從字面上看是一種介于斜杠之間或介于跟在 %r 后的任意分隔符之間的模式,如下所示:

/pattern/
/pattern/im    # 可以指定選項
%r!/usr/local! # 一般的分隔的正則表達式

實例

#!/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
嘗試一下 ?


這將產生以下結果:

Line1 contains Cats

正則表達式修飾符

正則表達式從字面上看可能包含一個可選的修飾符,用于控制各方面的匹配。修飾符在第二個斜杠字符后指定,如上面實例所示。下標列出了 可能的修飾符:

修飾符描述
i當匹配文本時忽略大小寫。
o只執行一次 #{} 插值,正則表達式在第一次時就進行判斷。
x忽略空格,允許在正則表達式中進行注釋。
m匹配多行,把換行字符識別為正常字符。
u,e,s,n把正則表達式解釋為 Unicode(UTF-8)、EUC、SJIS 或 ASCII。如果沒有指定修飾符,則認為正則表達式使用的是源編碼。

就像字符串通過 %Q 進行分隔一樣,Ruby 允許您以 %r 作為正則表達式的開頭,后面跟著任意分隔符。這在描述包含大量您不想轉義的斜杠字符時非常有用。

# 下面匹配單個斜杠字符,不轉義
%r|/|               

# Flag 字符可通過下面的語法進行匹配
%r[</(.*)>]i  

正則表達式模式

除了控制字符,(+ ? . * ^ $ ( ) [ ] { } | \),其他所有字符都匹配本身。您可以通過在控制字符前放置一個反斜杠來對控制字符進行轉義。

下表列出了 Ruby 中可用的正則表達式語法。

模式描述
^匹配行的開頭。
$匹配行的結尾。
.匹配除了換行符以外的任意單字符。使用 m 選項時,它也可以匹配換行符。
[...]匹配在方括號中的任意單字符。
[^...]匹配不在方括號中的任意單字符。
re*匹配前面的子表達式零次或多次。
re+匹配前面的子表達式一次或多次。
re?匹配前面的子表達式零次或一次。
re{ n}匹配前面的子表達式 n 次。
re{ n,}匹配前面的子表達式 n 次或 n 次以上。
re{ n, m}匹配前面的子表達式至少 n 次至多 m 次。
a| b匹配 a 或 b。
(re)對正則表達式進行分組,并記住匹配文本。
(?imx)暫時打開正則表達式內的 i、 m 或 x 選項。如果在圓括號中,則只影響圓括號內的部分。
(?-imx)暫時關閉正則表達式內的 i、 m 或 x 選項。如果在圓括號中,則只影響圓括號內的部分。
(?: re)對正則表達式進行分組,但不記住匹配文本。
(?imx: re)暫時打開圓括號內的 i、 m 或 x 選項。
(?-imx: re)暫時關閉圓括號內的 i、 m 或 x 選項。
(?#...)注釋。
(?= re)使用模式指定位置。沒有范圍。
(?! re)使用模式的否定指定位置。沒有范圍。
(?> re)匹配無回溯的獨立模式。
\w匹配單詞字符。
\W匹配非單詞字符。
\s匹配空白字符。等價于 [\t\n\r\f]。
\S匹配非空白字符。
\d匹配數字。等價于 [0-9]。
\D匹配非數字。
\A匹配字符串的開頭。
\Z匹配字符串的結尾。如果存在換行符,則只匹配到換行符之前。
\z匹配字符串的結尾。
\G匹配最后一個匹配完成的點。
當在括號外時匹配單詞邊界,當在括號內時匹配退格鍵(0x08)。
\B匹配非單詞邊界。
\n, \t, etc.匹配換行符、回車符、制表符,等等。
\1...\9匹配第 n 個分組子表達式。
\10如果已匹配過,則匹配第 n 個分組子表達式。否則指向字符編碼的八進制表示。

正則表達式實例

字符

實例描述
/ruby/匹配 "ruby"
匹配 Yen 符號。Ruby 1.9 和 Ruby 1.8 支持多個字符。

字符類

實例描述
/[Rr]uby/匹配 "Ruby" 或 "ruby"
/rub[ye]/匹配 "ruby" 或 "rube"
/[aeiou]/匹配任何一個小寫元音字母
/[0-9]/匹配任何一個數字,與 /[0123456789]/ 相同
/[a-z]/匹配任何一個小寫 ASCII 字母
/[A-Z]/匹配任何一個大寫 ASCII 字母
/[a-zA-Z0-9]/匹配任何一個括號內的字符
/[^aeiou]/匹配任何一個非小寫元音字母的字符
/[^0-9]/匹配任何一個非數字字符

特殊字符類

實例描述
/./匹配除了換行符以外的其他任意字符
/./m在多行模式下,也能匹配換行符
/\d/匹配一個數字,等同于 /[0-9]/
/\D/匹配一個非數字,等同于 /[^0-9]/
/\s/匹配一個空白字符,等同于 /[ \t\r\n\f]/
/\S/匹配一個非空白字符,等同于 /[^ \t\r\n\f]/
/\w/匹配一個單詞字符,等同于 /[A-Za-z0-9_]/
/\W/匹配一個非單詞字符,等同于 /[^A-Za-z0-9_]/

重復

實例描述
/ruby?/匹配 "rub" 或 "ruby"。其中,y 是可有可無的。
/ruby*/匹配 "rub" 加上 0 個或多個的 y。
/ruby+/匹配 "rub" 加上 1 個或多個的 y。
/\d{3}/剛好匹配 3 個數字。
/\d{3,}/匹配 3 個或多個數字。
/\d{3,5}/匹配 3 個、4 個或 5 個數字。

非貪婪重復

這會匹配最小次數的重復。

實例描述
/<.*>/貪婪重復:匹配 "<ruby>perl>"
/<.*?>/非貪婪重復:匹配 "<ruby>perl>" 中的 "<ruby>"

通過圓括號進行分組

實例描述
/\D\d+/無分組: + 重復 \d
/(\D\d)+/分組: + 重復 \D\d 對
/([Rr]uby(, )?)+/匹配 "Ruby"、"Ruby, ruby, ruby",等等

反向引用

這會再次匹配之前匹配過的分組。

實例描述
/([Rr])uby&\1ails/匹配 ruby&rails 或 Ruby&Rails
/(['"])(?:(?!\1).)*\1/單引號或雙引號字符串。\1 匹配第一個分組所匹配的字符,\2 匹配第二個分組所匹配的字符,依此類推。

替換

實例描述
/ruby|rube/匹配 "ruby" 或 "rube"
/rub(y|le))/匹配 "ruby" 或 "ruble"
/ruby(!+|\?)/"ruby" 后跟一個或多個 ! 或者跟一個 ?

這需要指定匹配位置。

實例描述
/^Ruby/匹配以 "Ruby" 開頭的字符串或行
/Ruby$/匹配以 "Ruby" 結尾的字符串或行
/\ARuby/匹配以 "Ruby" 開頭的字符串
/Ruby\Z/匹配以 "Ruby" 結尾的字符串
/Ruby/匹配單詞邊界的 "Ruby"
/rub\B/\B 是非單詞邊界:匹配 "rube" 和 "ruby" 中的 "rub",但不匹配單獨的 "rub"
/Ruby(?=!)/如果 "Ruby" 后跟著一個感嘆號,則匹配 "Ruby"
/Ruby(?!!)/如果 "Ruby" 后沒有跟著一個感嘆號,則匹配 "Ruby"

圓括號的特殊語法

實例描述
/R(?#comment)/匹配 "R"。所有剩余的字符都是注釋。
/R(?i)uby/當匹配 "uby" 時不區分大小寫。
/R(?i:uby)/與上面相同。
/rub(?:y|le))/只分組,不進行 \1 反向引用

搜索和替換

subgsub 及它們的替代變量 sub!gsub! 是使用正則表達式時重要的字符串方法。

所有這些方法都是使用正則表達式模式執行搜索與替換操作。subsub! 替換模式的第一次出現,gsubgsub! 替換模式的所有出現。

subgsub 返回一個新的字符串,保持原始的字符串不被修改,而 sub!gsub! 則會修改它們調用的字符串。

下面是一個實例:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

phone = "138-3453-1111 #這是一個電話號碼"

# 刪除 Ruby 的注釋
phone = phone.sub!(/#.*$/, "")   
puts "電話號碼 : #{phone}"

# 移除數字以外的其他字符
phone = phone.gsub!(/\D/, "")    
puts "電話號碼 : #{phone}"

嘗試一下 ?


這將產生以下結果:

電話號碼 : 138-3453-1111 
電話號碼 : 13834531111

下面是另一個實例:

#!/usr/bin/ruby

text = "rails are rails, really good Ruby on Rails"

# 把所有的 "rails" 改為 "Rails"
text.gsub!("rails", "Rails")

# 把所有的單詞 "Rails" 都改成首字母大寫
text.gsub!(/rails/, "Rails")

puts "#{text}"
嘗試一下 ?


這將產生以下結果:

Rails are Rails, really good Ruby on Rails
關閉
程序員人生
主站蜘蛛池模板: 中文精品久久久久国产不卡 | 2020自拍偷区亚洲综合图片 | 欧美亚洲免费久久久 | 高清国产一区二区三区 | 免费jizz在线播放视频 | 波多野结衣在线观看视频 | 中国精品18videosex性中国 | 一级爱爱片 | 动漫网站在线观看 | 免费毛片网站 | 亚洲爽爽网 | 国产色综合久久无码有码 | 亚洲一区影院 | 中文版在线乱码在线看 | 亚洲高清一区二区三区久久 | 免费日本在线 | 国产一区二区自拍视频 | 性色生活免费看性大片 | 日韩精品一区二区三区中文在线 | 欧美日韩性猛交xxxxx免费看 | 伊人影院在线视频 | 欧美aa级 | 国产欧美亚洲精品第3页在线 | 午夜免费体验 | 国产成人综合亚洲欧美在 | 国产欧美另类久久久品 | 欧美性xxxx极品高清 | 99久久成人 | 色日本在线 | 免费a级作爱片免费观看中 免费a网站 | 乱在线伦视频免费 | 欧美不卡视频 | 国产欧美日韩精品一区二区三区 | 2022偷拍午夜视频在线播放 | 视频一区二区三区欧美日韩 | 成人午夜免费观看 | 欧美成人高清在线视频大全 | 国产欧美二区三区 | 成人精品一区二区不卡视频 | 福利一区二区 | 国产一区亚洲 |