详细介绍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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python MySQLdb Linux下安装笔记
May 09 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
python设置环境变量的作用和实例
Jul 09 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
如何利用python发送邮件
Sep 26 Python
python单例模式的应用场景实例讲解
Feb 24 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
pw的一个放后门的方法分析
2007/10/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
常用python编程模板汇总
2016/02/12 Python
python中学习K-Means和图片压缩
2017/11/20 Python
Python决策树分类算法学习
2017/12/22 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
解析python实现Lasso回归
2019/09/11 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
python如何修改文件时间属性
2021/02/05 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
C#的几个面试问题
2016/05/22 面试题
计算机专业自荐信
2013/10/14 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
民主生活会主持词
2015/07/01 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android