详细介绍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 相关文章推荐
深入理解Javascript中的this关键字
Mar 27 Python
Python类属性与实例属性用法分析
May 09 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
python开发利器之ulipad的使用实践
Mar 16 Python
windows 下python+numpy安装实用教程
Dec 23 Python
python实现Zabbix-API监控
Sep 17 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
基于Python把网站域名解析成ip地址
May 25 Python
Pytorch转tflite方式
May 25 Python
基于Python爬取搜狐证券股票过程解析
Nov 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中opendir函数用法实例
2014/11/15 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
python操作列表的函数使用代码详解
2017/12/28 Python
python删除过期log文件操作实例解析
2018/01/31 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
酒店员工检讨书
2014/02/18 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
汉字听写大会观后感
2015/06/12 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
Oracle使用别名的好处
2022/04/19 Oracle