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!

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

subgsub返回一个新字符串,而原始字符串保持不变,而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
广告

© . All rights reserved.