下面是本人翻译的一小段,贴在网上请大家指教
Ruby正则表达式
这个是我昨天看Porgramming ruby的时候看到的一小段,今天把它翻译出来。水平有限,呵呵
正则表达式是用一个字符串匹配特定模式的字符的一种简单的方法。你通过写式子在两个”/”之间创建了一个正则,通过ruby解析,正则表达式就作为一个对象被操作啦。
例如:你要用正则写一个式子,匹配的字符串含有Perl或者Python。
代码
从前面的斜线开始的式子的包含了我们要匹配的两个东西,他们用” | ”分割,竖线意味着或,要不就是左边的要不就是右边的,要么就是perl,要么就是python。你可以在式子里面使用圆括号,这就像你用在数学表达式里一样,所以刚才的式子你还可以写成
代码
你也可以在式子中指定重复的部分。/ad+c/匹配一个包含一个a后跟着一个或多个b,再跟着一个c的字串。把加号改成乘号,/ab*c/这个式子匹配一个a,0或多个b,一个c.
你还可以匹配式子中的一组字符。一些公共的实例就像\s是字符类的,它匹配一个空格字符(空格,tab,新行);\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 Python/ # Perl, a space, and Python
- /Perl *Python/ # Perl, zero or more spaces, and Python
- /Perl +Python/ # Perl, one or more spaces, and Python
- /Perl\s+Python/ # Perl, whitespace characters, then Python
- /Ruby (Perl|Python)/ # Ruby, a space, and either Perl or Python
一旦你创建了一个式子,不用它就说不过去了。匹配操作符是=~,它可以把String和正则试相匹配,如果在String中发现了式子,=~就返回他的起始位置,否则就返回空。这说明你能用正则作为if和while的条件。例如,下面的代码片段里面写出的包含perl或Python的
代码
- String。
- 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'
你还可以用ruby的这个方法替换所有出现perl和python的地方:
代码
- line.gsub(/Perl|Python/, 'Ruby')
就到这啦,以后有时间会陆续的发一些出来的。