详细介绍Ruby中的正则表达式
作者:goldensun 发布时间:2023-12-03 19:44:46
标签:Ruby
正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合。
语法
正则表达式从字面上看是一种介于斜杠之间或介于跟在 %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
正则表达式修饰符
正则表达式从字面上看可能包含一个可选的修饰符,用于控制各方面的匹配。修饰符在第二个斜杠字符后指定,如上面实例所示。下标列出了 可能的修饰符:
就像字符串通过 %Q 进行分隔一样,Ruby 允许您以 %r 作为正则表达式的开头,后面跟着任意分隔符。这在描述包含大量您不想转义的斜杠字符时非常有用。
# 下面匹配单个斜杠字符,不转义
%r|/|
# Flag 字符可通过下面的语法进行匹配
%r[</(.*)>]i
正则表达式模式
除了控制字符,(+ ? . * ^ $ ( ) [ ] { } | \),其他所有字符都匹配本身。您可以通过在控制字符前放置一个反斜杠来对控制字符进行转义。
下表列出了 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


猜你喜欢
- Vue 中使用 jQuery 和 Bootstrap 不是特别符合 Vue 原生的写法,但是有时候又要用,所以放上我的引入设置,供大家参考。
- 题目: 一个环形单链表,从头结点开始向后,指针每移动一个结点,就计数加1,当数到第m个节点时,就把该结点删除,然后继续从下一个节点开始从1计
- 本文采用OpenCV3和Python3 来实现静态图片的人脸识别,采用的是Haar文件级联。 首先需要将OpenCV3源代码中找到data文
- JavaScript lastIndexOf 方法lastIndexOf 方法用于计算指定的字符串在整个字符串中最后一次出现的位置,并返回该
- 1. File->Setting 打开如下所示的对话框,可以在Editor->General->Font下设置
- 天极网软件频道的图片切换特效,完全是由XHTML+CSS+JS实现的图片切换特效,弄了好半天啊!!如果您使用或者转载请别忘了加我的一个连接啊
- 近期,又有接触到pyecharts这个包的使用,后面发现这个曾经好用的包发生了一些变化,为了方便大家的使用,这里整理如下:绘图风格theme
- 路由控制匹配本文主要分析下express的核心功能路由的使用。express路由的匹配规则:支持模糊匹配,同一个路由可能命中多个定义的路由r
- 1. 从官网选择Prometheus版本进行下载官网地址>> https://github.com/prometheus/pro
- 从毕业实习算起,从事可用性方面的工作到现在已经5年了。在此记录笔者的一些所见所想,和大家讨论分享一下。用户研究在“以用户为中心”的界面设计方
- 在用 Vue 的父子组件传值时遇到一个冷门的问题,子组件改变值后父组件的值也随之改变了,特此记录下原因和解决方式。再系统梳理下 JavaSc
- 数据库中内置函数的使用该篇主要介绍数据库中内置函数的使用,主要有日期函数,字符串函数,数学函数。(一)日期函数select current_
- MySQL5升级为MySQL8问题my.ini首先推荐一个软件“everything”,一个轻巧的遍
- 本文分别介绍了安装python2和python3的详细方法,分享给大家。一、Windows系统很多童鞋问之前的教程怎么没有介绍安装pytho
- 这两天为了这个问题, Gitter 上问, Twitter 上问, GitHub 上问, 两天没反应原来写博客的 jlongster 不理我
- Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍p
- 原理1.使用python中的mtplotlib库。2.立体爱心面公式点画法(实心)代码import matplotlib.pyplot as
- Selenium 封装了现成的文件上传操作。但是随着现代前端框架的发展,文件上传的方式越来越多样。而有一些文件上传的控件,要做自动化控制会更
- 所谓产品其实最终展现在用户面前的只是界面而已,所谓界面绝大多数时候只包括两个部分:图片、文字。重视界面上的每一个像素和每一个文字是UED的基
- 关于js中的offsetWidth、clientWidth、scrollWidth等一系列属性及其方法一直都傻傻分不清,这里就来总结一下这些