• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【翻译】Programming Ruby——正则表达式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

正则表达式

Ruby大部分的内置类型都和其它的编程语言很相似。主要有strings,integers,floats,arrays等等。然而,只有脚本语言,

如Ruby,Perl,和awk等提供了内置表达式类型的支持。惭愧的是:正则表达式尽管比较隐蔽,但却是一个很强大的文本处理工具。

内置它们比单纯的添加接口类库有着很大的区别。

正则表达式是使用指定的模式匹配字符串的一种简单的方法。在Ruby中,创建正则表达式的典型方式是把模式写在两个斜线之间(/pattern/)。

毕竟,Ruby就是Ruby,正则表达式也是对象,也能像对象般操作。

例如,你可以使用下面的正则表达式写一个模式,它匹配一个字符串中包含有Perl或Python。

/Perl|Python/

在正斜线体内,是两个我们要匹配的字符串,它们使用(|)分隔。这个管道符的意思是"左边的或者右边的",在这个模式中是Perl或者Python。

你还可以在模式中使用括号,就像是在算术表达式中使用的那样,因此这个模式还可以写成

/P(erl|ython)/

你还可以在模式中指定重复。/ab+c/匹配字符串中一个a后面有一个或多个b然后跟着是一个c。把+号换成*号,/ab*c/创建的正则表达式是

匹配一个a后面跟着0个或多个b然后跟着是一个c。

你还可以在模式中匹配一组字符。常用的字符类型例子有\s,它匹配一个空白字符(space,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

一但创建了一个模式,不能使用它是件很郁闷的事情。匹配操作符=~用来对一个字符串进行正则表达式匹配。如果匹配成功,

=~返回第一次匹配成功的位置,否则它返回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'

你能使用Ruby替换所有出现有Perl和Python的地方。
  line.gsub(/Perl|Python/, 'Ruby')

把上面的知识综合在一起,代码如下:

line = 'I like Python program. It is a good lanuage.
  I havent learned about Perl. Do you know Perl?'
if line =~ /Perl|Python/
  puts "Scripting language mentioned: #{line}"
end
puts "run line.sub(/Perl/, 'Ruby')"
puts line.sub(/Perl/, 'Ruby')
puts "run line.gsub(/Python/, 'Ruby')"
puts line.gsub(/Python/, 'Ruby')
puts "run line.gsub(/Perl|Python/, 'Ruby')"
puts line.gsub(/Perl|Python/, 'Ruby')

输出的结果如下:

Scripting language mentioned: I like Python program. It is a good lanuage.

  I havent learned about Perl. Do you know Perl?

run line.sub(/Perl/, 'Ruby')

I like Python program. It is a good lanuage.

  I havent learned about Ruby. Do you know Perl?

run line.gsub(/Python/, 'Ruby')

I like Ruby program. It is a good lanuage.

  I havent learned about Perl. Do you know Perl?

run line.gsub(/Perl|Python/, 'Ruby')

I like Ruby program. It is a good lanuage.

  I havent learned about Ruby. Do you know Ruby?

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
sublime ruby [Decode error - output not utf-8] 错误发布时间:2022-07-14
下一篇:
【ruby】安装Ruby发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap