详细介绍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的内建模块collections的教程
Apr 28 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
Django自定义用户登录认证示例代码
Jun 30 Python
PageFactory设计模式基于python实现
Apr 14 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
通过实例解析python and和or使用方法
Nov 14 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
python - asyncio异步编程
Apr 06 Python
浅谈Python项目的服务器部署
Apr 25 Python
实战Python爬虫爬取酷我音乐
Apr 11 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使用反射插入对象示例分享
2014/03/11 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
JS库之ParticlesJS使用简介
2017/09/12 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
全面了解Python环境配置及项目建立
2016/06/30 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
c语言常见笔试题总结
2016/09/05 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
党风廉政承诺书
2014/03/27 职场文书
销售顾问工作计划书
2014/09/15 职场文书
运动员入场前导词
2015/07/20 职场文书
学生检讨书范文
2019/06/24 职场文书
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python