详细介绍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实现多线程下载文件的代码实例
Jun 01 Python
Python编写屏幕截图程序方法
Feb 18 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python celery分布式任务队列的使用详解
Jul 08 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
浅谈python锁与死锁问题
Aug 14 Python
python3中确保枚举值代码分析
Dec 02 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 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
PHP 定界符 使用技巧
2009/06/14 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
Python自定义一个异常类的方法
2019/06/27 Python
Python交互式图形编程的实现
2019/07/25 Python
python opencv如何实现图片绘制
2020/01/19 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
python Xpath语法的使用
2020/11/26 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
电子商务个人自荐信
2013/12/12 职场文书
师生聚会感言
2014/01/26 职场文书
20年同学聚会感言
2014/02/03 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
大学生个人学习总结
2015/02/15 职场文书
实习班主任自我评价
2015/03/11 职场文书
公司备用金管理制度
2015/08/04 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
vue实现书本翻页动画效果实例详解
2022/04/08 Vue.js