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

匹配文本时忽略大小写。

2

仅在第一次计算正则表达式文字时执行 #{} 插值一次。

3

X

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

4

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

5

你,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!

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

sub和gsub返回一个新字符串,保留原始字符串不变其中sub! gsub!修改调用它们的字符串。

以下是示例 -

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