详细介绍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解释器理解Python中的字节码
Apr 01 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
python中的反斜杠问题深入讲解
Aug 12 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python 必须了解的5种高级特征
Sep 10 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python学习 流程控制语句详解
2016/06/01 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
高职助产应届生自荐信
2013/09/24 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
财务经理的岗位职责
2013/12/17 职场文书
运动会入场式解说词
2014/02/18 职场文书
班训口号大全
2014/06/18 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
主持稿开场白
2015/06/01 职场文书
校园新闻稿范文
2015/07/18 职场文书
会议室使用管理制度
2015/08/06 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers