创建正则表达式对象

#以大写字母开始后面紧跟N个数字,方式一
reg = /[A-Z]\d+/
#方式二
reg = Regexp.new("[A-Z]\d+")
reg = Regexp.new(/[A-Z]\d+/)

匹配检测:=~,当能够匹配的时候,返回第一次匹配的位置,不能匹配的话返回nil

letter_somenum = /[A-Z|a-z]\d+/if letter_somenum =~ "f1"print "f1 matches regexp"
elseprint "f1 not matches regexp"
end

字符串匹配

#只要字符串中含有a到z且紧跟数字的都满足
/[a-z]\d+/

匹配行首行为,^和$。

#匹配以大写字母开头的表达式
reg = /^[A-Z]/

#匹配末尾是大写字母的字符串
second = Regexp.new("[A-Z]$")
p second =~ "F1"
p second =~ "1F"

#首位匹配,全部是大写字母
third = Regexp.new("^[A-Z]+$")

多个字符选一个使用[]

#ABC三个字符中的任意一个
/[ABC]/

#对于连续的字符可以使用-,匹配任意一个大写字母
/[A-Z]/

#匹配任意字母或下划线
/[A-Za-z_]/

中括号里的^,表示之外的字符

#ABC之外的所有字符
/[^ABC]/

一个点,匹配任意的单一字符

#以V开头,以s结尾的所有字符串
never_mind = /^V.*s$/
p never_mind =~ "Voctrals"

匹配一个空白字符(\s)

#F开头,N个字母,空格,N个字母结尾
space = /^F[A-Za-z]+\s[A-Za-z]+$/

匹配一个数字(\d)

#匹配多余0个数字
number = /^\d+$/

匹配一个英文字母或者一个数字(\w)

#匹配三个字母或者数字
letter_num = /^\w\w\w$/

前端匹配成功(\A)

#当且仅当前端匹配成功
front = /\Aabc/

后端匹配成功(\Z),他是应该出现在行尾的。。。

#当且仅当末端匹配成功
back = /abc\Z/

转义字符,如\^,\$,\[,\]等,让他们不再具有特殊意义

重复出现

*: 0次以上

#出现0次A,或者N次A
/A*/

+: 1次以上

#出现N次A,N不允许为0
/A+/

?: 0次或一次

#要么出现A,要么就不要出现A,*这里好像有个BUG!!!*
/A?/

最短匹配

#匹配最短的A*B,最好就是AAB
/A*?B/
#匹配最短的A?B,最好就是AB
/A+?B/

多个字符重复()

#匹配重复的ABC
/(ABC)*/

或者:|

#匹配ABC或者CBA
/(ABC)*|(CBA)*/

正则表达式的一些选项,直接加载//后面就可以了

i,不区分大小写

/[a-z]*/i

s,e,u,n: 指定字符集,默认为n

x: 忽略空白,#之后的内容,这样就可以给正则表达式加注释了

/[a-z]+    #N个字母
\d?    #一个或没有数字
/xi

m:转换换行符号为.

回溯参照:取出满足条件的字符串部分

在正则表达式中用小括号()括起来的部分,可以使用$1,$2等对应着取出来,ruby会自动的去匹配。

/(.)(..)(.)/ =~ "why????"p $1    #=>"w"
p $2    #=>"hy"
p $3    #=>"?"

如果不想去匹配其中的某些,可以使用?:,放到括号内的前面

/(.)(\d\d)+(.)/ =~ "123456"
p $1    #=>1
p $2    #=>45
p $3    #=>6
/(.)(?:\d\d)+(.)/ =~ "123456"
p $1    #=>1
p $2    #=>6

ruby预留的$`获取匹配字符前面的部分,$&获取匹配的字符串,&'获取匹配字符后面的部分

/Shift/i =~ "control shift alt table"
p $`    #=>"control "
p $&    #=>"shift"
p $'    #=>" alt table"

使用正则表达式的方法!!!!

sub和gsub,用来替换匹配成功的字符串

sub只会替换第一个匹配成功的字符串,并返回

gsub会替换所有匹配的字符串,并返回

他们都不会修改原字符串,除非加上!,^_^

some= "abc  def    ghi jk    lmn"
#把第一个匹配的多个空格替换为_
p some.sub(/\s+/, "_")    #=>"abc_def    ghi jk    lmn"
p some    #=>"abc  def    ghi jk    lmn"
#把所有匹配的多个空格替换为_
p some.gsub(/\s+/, "_")    #=>"abc_def_ghi_jk_lmn"
p some    #=>"abc  def    ghi jk    lmn"

对满足的部分进行处理,并返回处理过后的some

some= "abc  def    ghi jk    lmn"
# 替换第一个满足的部分为^_^
matched = some.sub(/\s+/) { |match| "^_^"
}
p matched    #=> "abc^_^def    ghi jk    lmn"

scan方法,跟gsub很像,但是它不会进行取代动作,而是对满足的字符串进行处理:

scantest = "This is a string test for scan"
gather = Array.newother = scantest.scan(/i./){|matched|gather.unshift(matched)
}
p gather    #=>["in", "is", "is"]

当使用()的时候,如果匹配部分为一个变量,则会传递数组给变量,如:

scantest = "This is a string test for scan"gather = Array.newscantest.scan(/(i)(.)/){|matched|gather.unshift(matched)
}p gather    #=>[["i", "n"], ["i", "s"], ["i", "s"]]

如果匹配块儿中的变量为多个,不会传递数组,而是传递元素,如:

scantest = "This is a string test for scan"gather = Array.newscantest.scan(/(i)(.)/){|a, b|gather.unshift(a)gather.unshift(b)
}p gather    #=>["n", "i", "s", "i", "s", "i"]

不指定区块的时候,返回满足的元素组成的数组

scantest = "This is a string test for scan"gather = Array.newgather = scantest.scan(/i./)p gather    #=>["is", "is", "in"]

转载于:https://www.cnblogs.com/voctrals/p/4054139.html

Ruby Regexp相关推荐

  1. 在Rails资产管道中使用字体

    本文翻译自:Using fonts with Rails asset pipeline I have some fonts being configured in my Scss file like ...

  2. oxidized配置(docker版)

    oxidized 是一个网络设备备份系统, 轻量级,可扩展,支持超过90多个操作系统.同时支持h3c,华为,思科,容器化版本部署比较简单,主要步骤如下: 系统:debian 首先安装Docker: 官 ...

  3. docker实践-oxidized网络设备自动备份部署

    oxidized是可以支持大部分主流设备的备份软件,在Github上oxidized有向导文档,支持通过软件包,甚至docker方式部署 参考GitHub - ytti/oxidized: Oxidi ...

  4. 整理了一下oxidized+mysql+gitlab,感觉很好用,做个记录

    安装oxidized 安装ruby yum install centos-release-scl yum install rh-ruby23 rh-ruby23-ruby-devel scl enab ...

  5. centos 7 安装oxidized 实现交换机自动备份

    环境: centos 7.4 华为交换机 一.安装 1. yum remove ruby ruby-devel    // 卸载系统自带的ruby-devel 2. yum groupinstall ...

  6. Oxidized-20180912-docker 版本的网络设备备份系统

    Problem Oxidized 非常好用,基本兼容所有网络设备的备份,但是有一个小小小小的问题,就是在 Linux 环境下,默认安装的 Ruby 版本问题为其在离线情况下的安装增添了很多的麻烦和限制 ...

  7. [SCTF2019]Flag Shop erb模板注入

    进入题目可以看到一个是要用自己的JinKela去购买flag  这种类型的题目我想到之前都是有一个jwt认证,通过伪造验证信息修改金额以达到购买的效果 点击work抓包可以发现确实有jwt(通过一段字 ...

  8. 网络设备自动备份工具 Oxidized 使用体验

    Oxidized 是一个使用 Ruby 编写的开源网络设备配置备份工具,是 RANCID(思科的一个工具) 的替代品,轻量级且可扩展的 Oxidized 支持 130 多种操作系统. 体验一下它的功能 ...

  9. Oxidized 网络设备自动备份系统搭建

    文章目录 前言 一.oxidized是什么? 二.oxidized搭建 1.环境准备 2.安装步骤 3.配置文件 4.router.db 文件规范 5.运行 6.Nginx验证登录 三,踩坑总结 前言 ...

最新文章

  1. 钱学森在30年前对虚拟现实和元宇宙的思考
  2. Powershell指令集_2
  3. python爬虫系列之数据的存储(二):csv库的使用
  4. python测试开发django-44.xadmin上传图片和文件
  5. Number With The Given Amount Of Divisors(反素数)
  6. 大数据面试-05-大数据工程师面试题
  7. CXF 生成Web Service Client(将WSDl 转化成 Java代码)
  8. hive-2.3.3安装指北
  9. 20180514 ++i和i++
  10. 一周信创舆情观察(11.1~11.7)
  11. linux 查看内存大小命令,Linux查看命令:CPU型号,内存大小,硬盘空间
  12. 如何写出优秀的数据报告分析
  13. 基于Pytorch中的Dataset和Dataloader读取Voc类目标检测数据集
  14. Python编曲实践(九):如何计算并估计音乐的调性(大/小调+主音)?Krumhansl-Schmuckler调性分析算法的原理与实现
  15. WPF UserControl响应PreviewKeyDown事件方法
  16. CeSi 进程集中管理部署
  17. 【名称解释】上解中央支出
  18. 海外 网易云音乐无法正常使用 极简
  19. 使用UnrealPak.exe创建Pak文件
  20. Nature | 植物与病原菌“军备竞赛”的“化学装备” 何祖华研究组在水稻广谱抗病的免疫代谢机制上取得重大进展...

热门文章

  1. oracle中lock和latch的用途
  2. linux环境变量与文件查找
  3. shm_overview(7)
  4. nginx同时支持asp.net与php
  5. 14 | 深入解析Pod对象(一):基本概念
  6. html中单选多选怎么写,HTML中select标签单选多选用法详解
  7. mysql兼容性高吗_MySQL与标准的兼容性
  8. 穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
  9. 为什么说DevOps的必然趋势是BizDevOps?
  10. 重磅 | 数据库自治服务DAS论文入选全球顶会SIGMOD