正则表达 regular expression 是特殊的字符序列,用模式中句法帮助匹配或查找其它字符串或字符串集。html
模式在俩个//之间,或者以%r开头的在任意分隔符之间。 操做符=~。mysql
/pattern/ /pattern/im # option can be specified %r!/usr/local! # general delimited regular expression
demo_re.rbgit
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
Regular expression literals正则表示字符能够包含可选修改符optional modifier 来控制匹配。修改符在第二个/后,以下 −sql
Sr.No. | Modifier & Description |
---|---|
1 | i数据库 Ignores case when matching text. 忽略大小写express |
2 | oapi Performs #{} interpolations only once, the first time the regexp literal is evaluated.只执行一次内插,当正则表达式第一次计算时。ruby |
3 | x服务器 Ignores whitespace and allows comments in regular expressions. 忽略空白,容许注释。 |
4 | m Matches multiple lines, recognizing newlines as normal characters. 匹配多行,将新行看做正常字符。 |
5 | u,e,s,n Interprets the regexp as Unicode (UTF-8), EUC, SJIS, or ASCII. If none of these modifiers is specified, the regular expression is assumed to use the source encoding. 将正则表达式分布解释为Unicode, EUC, SJIS,或ASCII码。 |
Ruby 运行regular expressions 以 %r开头,后面跟自选的分隔符。
# Following matches a single slash character, no escape required %r|/| # Flag characters are allowed with this syntax, too %r[</(.*)>]i
2.2 =~
and match模式匹配可使用 =~
操做符 或 match 方法
=~
operator=~
是Ruby 基本模式匹配操做符。 若是发现匹配,返回第一个匹配的索引,不然返回nil。
/hay/ =~ 'haystack' #=> 0 'haystack' =~ /hay/ #=> 0 /a/ =~ 'haystack' #=> 1 /u/ =~ 'haystack' #=> nil
若是匹配,$~
全局变量设置,它是MatchData 对象。. ::last_match等同于 $~
.
match 返回 MatchData 对象。
/st/.match('haystack') #=> #<MatchData "st">
metacharacters (
, )
, [
, ]
, {
, }
, .
, ?
, +
, *
在模式中出现,有特殊做用。 要匹配它们,须要使用转义符 \. . To match a backslash 例如匹配\,须要使用 \\
.
/1 \+ 2 = 3\?/.match('Does 1 + 2 = 3?') #=> #<MatchData "1 + 2 = 3?"> /a\\\\b/.match('a\\\\b') #=> #<MatchData "a\\b">
/\s\u{6771 4eac 90fd}/.match("Go to 東京都") #=> #<MatchData " 東京都"> 任意 Ruby 表达式能够嵌入模式,使用#{...}结构。 place = "東京都" /#{place}/.match("Go to 東京都") #=> #<MatchData "東京都">
最重要的字符串方法是sub 和 gsub, 原地(in-place)对应的是 sub! 和 gsub!.
以上都使用正则表达来执行查找替换。 The sub和 sub! 替换模式中的第一个,而 gsub 和 gsub! 替换全部。
sub 和 gsub 返回新的字符串,原来的字符串不变; 而 sub! 和 gsub! 修改调用的字符串。
demo_subgsub.rb
phone = "2004-959-559 #This is Phone Number" # Delete Ruby-style comments phone = phone.sub!(/#.*$/, "") puts "Phone Num : #{phone}" # Remove anything other than digits phone = phone.gsub!(/\D/, "") puts "Phone Num : #{phone}"
结果:
Phone Num : 2004-959-559 Phone Num : 2004959559
demo_gsub2.rb
text = "rails are rails, really good Ruby on Rails" # Change "rails" to "Rails" throughout text.gsub!("rails", "Rails") # Capitalize the word "Rails" throughout text.gsub!(/\brails\b/, "Rails") puts "#{text}"
结果:
Rails are Rails, really good Ruby on Rails
Ruby DBI 提供了独立于数据库的界面,相似于Perl DBI 模块。
DBI 提供了Ruby code 和 数据库之间的抽象层。
DBI 支持如下数据库
Ruby DBI 使用俩层
The database interface (DBI) layer. 独立于database,提供经常使用访问方法,无关通信的数据库服务器类型。
The database driver (DBD) layer. 这层与database相关;不一样的数据库引擎有不一样的驱动。 MySQL, PostgreSQL, InterBase, Oracle, 等等都有本身的驱动。.每一个驱动将解释DBI layer请求,并将它们与给定数据库服务器的请求匹配。
链接MySQL databases, 须要安装Ruby MySQL 模块。
下载 https://www.tmtm.org/en/mysql/ruby/
备注: 由于 支持数据库的RUBY版面较低,并且 Mysql 等数据库的版本都较低,详细的数据库驱动安装及操做就省略了。