详细介绍Ruby中的正则表达式


Posted in Python onApril 10, 2015

正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合。
语法

正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模式,如下所示:

/pattern/
/pattern/im  # 可以指定选项
%r!/usr/local! # 一般的分隔的正则表达式
实例
#!/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

正则表达式修饰符

正则表达式从字面上看可能包含一个可选的修饰符,用于控制各方面的匹配。修饰符在第二个斜杠字符后指定,如上面实例所示。下标列出了 可能的修饰符:

详细介绍Ruby中的正则表达式

就像字符串通过 %Q 进行分隔一样,Ruby 允许您以 %r 作为正则表达式的开头,后面跟着任意分隔符。这在描述包含大量您不想转义的斜杠字符时非常有用。

# 下面匹配单个斜杠字符,不转义


%r|/|       
 
# Flag 字符可通过下面的语法进行匹配
%r[</(.*)>]i

正则表达式模式

除了控制字符,(+ ? . * ^ $ ( ) [ ] { } | \),其他所有字符都匹配本身。您可以通过在控制字符前放置一个反斜杠来对控制字符进行转义。

下表列出了 Ruby 中可用的正则表达式语法。

详细介绍Ruby中的正则表达式

详细介绍Ruby中的正则表达式详细介绍Ruby中的正则表达式详细介绍Ruby中的正则表达式详细介绍Ruby中的正则表达式详细介绍Ruby中的正则表达式搜索和替换

sub 和 gsub 及它们的替代变量 sub! 和 gsub! 是使用正则表达式时重要的字符串方法。

所有这些方法都是使用正则表达式模式执行搜索与替换操作。sub 和 sub! 替换模式的第一次出现,gsub 和 gsub! 替换模式的所有出现。

sub 和 gsub 返回一个新的字符串,保持原始的字符串不被修改,而 sub! 和 gsub! 则会修改它们调用的字符串。

下面是一个实例:

#!/usr/bin/ruby
 
phone = "2004-959-559 #This is Phone Number"
 
# 删除 Ruby 的注释
phone = phone.sub!(/#.*$/, "") 
puts "Phone Num : #{phone}"
 
# 移除数字以外的其他字符
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"
 
# 把所有的 "rails" 改为 "Rails"
text.gsub!("rails", "Rails")
 
# 把所有的单词 "Rails" 都改成首字母大写
text.gsub!(/\brails\b/, "Rails")
 
puts "#{text}"

这将产生以下结果:

Rails are Rails, really good Ruby on Rails
Python 相关文章推荐
python使用Tkinter显示网络图片的方法
Apr 24 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python多线程之事件Event的使用详解
Apr 27 Python
Flask框架各种常见装饰器示例
Jul 17 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 Python
Python pandas对excel的操作实现示例
Jul 21 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
Django中celery的使用项目实例
Jul 07 Python
对于Python的Django框架部署的一些建议
Apr 09 #Python
Python线程中对join方法的运用的教程
Apr 09 #Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 #Python
详解Python中的正则表达式的用法
Apr 09 #Python
Python中几种操作字符串的方法的介绍
Apr 09 #Python
详解Python中的__new__()方法的使用
Apr 09 #Python
Python中动态获取对象的属性和方法的教程
Apr 09 #Python
You might like
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
php获取文件名后缀常用方法小结
2015/02/24 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
微信小程序自定义导航栏
2018/12/31 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python并行分布式框架Celery详解
2018/10/15 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
详解python中的异常捕获
2020/12/15 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
学前教育求职自荐信范文
2013/12/25 职场文书
学生会主席竞聘书
2014/03/31 职场文书
关于环保的活动方案
2014/08/25 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
海洋天堂观后感
2015/06/05 职场文书