Ruby - 正则表达式

正则表达式是一种特殊的字符序列,可帮助您使用模式中的特殊语法匹配或查找其他字符串或字符串集。

正则表达式文字是斜线之间或任意分隔符之间的模式,后跟 %r 如下 −


语法

/pattern/
/pattern/im    # option can be specified
%r!/usr/local! # general delimited regular expression

示例

#!/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

正则表达式修饰符

正则表达式文字可能包含一个可选的修饰符来控制匹配的各个方面。 修饰符在第二个斜杠字符之后指定,如前所示,并且可以由这些字符之一表示 −

序号 修饰符 & 描述
1

i

匹配文本时忽略大小写。

2

o

仅执行一次 #{} 插值,这是第一次评估正则表达式文字。

3

x

忽略空格并允许正则表达式中的注释。

4

m

匹配多行,将换行符识别为普通字符。

5

u,e,s,n

将正则表达式解释为 Unicode (UTF-8)、EUC、SJIS 或 ASCII。 如果没有指定这些修饰符,则假定正则表达式使用源编码。

与以 %Q 分隔的字符串文字一样,Ruby 允许您以 %r 开始您的正则表达式,后跟您选择的分隔符。 当您描述的模式包含许多您不想转义的正斜杠字符时,这很有用 −

# Following matches a single slash character, no escape required
%r|/|

# Flag characters are allowed with this syntax, too
%r[</(.*)>]i

正则表达式模式

除了控制字符 (+ ? . * ^ $ ( ) [ ] { } | \),所有字符都匹配自己。 您可以通过在控制字符前面加上反斜杠来转义它。


正则表达式示例


搜索和替换

使用正则表达式的一些最重要的 String 方法是 subgsub,以及它们的就地变体 sub!gsub !

所有这些方法都使用正则表达式模式执行搜索和替换操作。 sub & sub! 替换模式的第一次出现,gsub & gsub! 替换所有出现。

subgsub 返回一个新字符串,保留原始字符串,而 sub!gsub! 修改 调用它们的字符串。

Following is the example −

#!/usr/bin/ruby

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

下面是另一个例子 −

#!/usr/bin/ruby

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