Ruby大部分的内置类型都和其它的编程语言很相似。主要有strings,integers,floats,arrays等等。然而,只有脚本语言,如Ruby,Perl,和awk等提供了内置表达式类型的支持。正则表达式尽管比较隐蔽,但却是一个很强大的文本处理工具。
正则表达式是使用指定的模式匹配字符串的一种简单的方法。在Ruby中,创建正则表达式的典型方式是把模式写在两个斜线之间/pattern/。
毕竟,Ruby就是Ruby,正则表达式也是对象,也能像对象般操作。
例如,你可以使用下面的正则表达式写一个模式,它匹配一个字符串中包含有Perl或Python。
<!--more--> /Perl|Python/
在正斜线体内,是两个我们要匹配的字符串,它们使用"|"分隔。这个管道符的意思是"左边的或者右边的",在这个模式中是Perl或者Python。
你还可以在模式中使用括号,就像是在算术表达式中使用的那样,因此这个模式还可以写成
/P(erl|ython)/
你还可以在模式中指定重复。例如加号,/ab+c/匹配字符串中一个a后面有一个或多个b然后跟着是一个c。把加号换成星号,/ab*c/创建的正则表达式是匹配一个a后面跟着0个或多个b然后跟着是一个c。
你还可以在模式中匹配一组字符。常用的字符类型例子有s,它匹配一个空白字符(space,tab,换行符,等等);d匹配任意数字;w匹配任意的典型单词字符。句号(.)匹配(基本上)任意字符。
我们把所有这些组合起来,做成实用的正则表达式。
/dd:dd:dd/ # a time such as 12:34:56 /Perl.*Python/ # Perl, zero or more other chars, then Python /Perl Python/ # Perl, a space, and Python /Perl *Python/ # Perl, zero or more spaces, and Python /Perl +Python/ # Perl, one or more spaces, and Python /Perls+Python/ # Perl, whitespace characters, then Python /Ruby (Perl|Python)/ # Ruby, a space, and either Perl or Python
一但创建了一个模式,不能使用它是件很郁闷的事情。匹配操作符=~用来对一个字符串进行正则表达式匹配。如果匹配成功,=~返回第一次匹配成功的位置,否则它返回nil。也就是说,你可以在if和while的条件声明中使用正则表达式。例如下面的代码片段,
如果字符串中包含有文本Perl或Python时,输出一条信息。
puts "Scripting language mentioned: #{line}" if line =~ /Perl|Python/
你能使用Ruby替换所有出现有Perl和Python的地方。
line.gsub(/Perl|Python/, 'Ruby')
从iHower的Ruby on Rails实战圣经中摘一个示例,用正则表达式抓取手机号码:
phone = "139-1234-5678"
if phone =~ /(d{3})-(d{4})-(d{4})/
start_with = $1
mid_num = $2
end_as = $3
end










