Ruby正则表达式介绍(Programming Ruby)

作者: slaughter
发布时间:2015-07-13 11:23:44

大多数语言都有字符串,整型,浮点型,数组等数据类型,所以ruby中的大多数内建类型对大家来说一定不算陌生。所谓的脚本语言比如perl,python,awk中都支持正则表达式
However, until Ruby came along, regular expression support was generally built into only the so-called scripting languages, such as Perl, Python, and awk. This is a shame: regular expressions, although cryptic, are a powerful tool for working with text.

 

本书整个都包括正则表达式的内容,所以这里没必要用一节涵盖所有内容。所以,我们只会涉及到几个正则表达式的例子。

 

正则表达式就是在一个字符串中查找一个匹配的模式,在Ruby中,要建立一个正在表达式,只要把要匹配的模式放到两个斜线中就行了(/pattern/),而且,在Ruby中,正则表达式也是对象,可以像对象一样被操作。

 

例如,你写了一个模式,匹配一个字符串中的Perl或者Python,模式如下:

 

/Perl|Python/              

 

The forward slashes delimit the pattern, which consists of the two things we're matching, separated by a pipe character (``|''). You can use parentheses within patterns, just as you can in arithmetic expressions, so you could also have written this pattern as

 

/P(erl|ython)/              

 

在模式里,还可以指定重复的字符,比如 /ab+c/匹配一个字符串包括一个a,一个或多个b,然后跟一个c。把加号改成星号,即 /ab*c/将匹配一个a,0个或多个b,然后是一个c。

 

在一个模式中,也可以匹配一类字符,比如"\s"匹配一个空格,"\d"匹配数字,"\w"匹配在典型单词出现的字符,"."匹配任何字符。

我们可以把这些规则写道一块,生成一些比较有用的表达式。

 

/\d\d:\d\d:\d\d/     # a time such as 12:34:56              /Perl.*Python/       # Perl, zero or more other chars, then Python              /Perl\s+Python/      # Perl, one or more spaces, then Python              /Ruby (Perl|Python)/ # Ruby, a space, and either Perl or Python              

创建了一个模式,当然要使用它。匹配操作符"=~"可以用来在一个字符串中匹配一个模式,如果在字符串中找到匹配的模式,=~ 返回它的开始位置,否则返回nil。所以,你也可以将正则表达式放到if或者while语句中作为判断条件。 比如,下面代码判断到如果一个字符串包括指定的模式(包含Perl或者Python),则输出一条消息。

if line =~ /Perl|Python/                puts "Scripting language mentioned: #{line}"              end              

 

一个字符串中被匹配到的部分也可以用ruby自带的替换函数替换成不同的值。

 

line.sub(/Perl/, 'Ruby')    # replace first 'Perl' with 'Ruby'              line.gsub(/Python/, 'Ruby') # replace every 'Python' with 'Ruby'              

 

在本书以后 章节中,还有很多关于正则表达式的东西要讲述。

来源:http://www.cnblogs.com/slaughter/articles/1326920.html

推荐: