详细介绍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修改字典内key对应值的方法
Jul 11 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
Python计算两个日期相差天数的方法示例
May 23 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
Django实现文件上传下载功能
Oct 06 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python实现智慧校园自动评教全新版
Jun 18 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实现Ftp用户的在线管理
2012/02/16 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
详解Python中with语句的用法
2015/04/15 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
利用python 读写csv文件
2020/09/10 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
班会关于环保演讲稿
2013/12/29 职场文书
空乘英文求职信
2014/04/13 职场文书
党日活动总结
2014/05/07 职场文书
现实表现材料范文
2014/12/23 职场文书
初中作文评语集锦
2014/12/25 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
放假通知怎么写
2015/08/18 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers