Ruby Regexp
创建正则表达式对象
#以大写字母开始后面紧跟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相关推荐
- 在Rails资产管道中使用字体
本文翻译自:Using fonts with Rails asset pipeline I have some fonts being configured in my Scss file like ...
- oxidized配置(docker版)
oxidized 是一个网络设备备份系统, 轻量级,可扩展,支持超过90多个操作系统.同时支持h3c,华为,思科,容器化版本部署比较简单,主要步骤如下: 系统:debian 首先安装Docker: 官 ...
- docker实践-oxidized网络设备自动备份部署
oxidized是可以支持大部分主流设备的备份软件,在Github上oxidized有向导文档,支持通过软件包,甚至docker方式部署 参考GitHub - ytti/oxidized: Oxidi ...
- 整理了一下oxidized+mysql+gitlab,感觉很好用,做个记录
安装oxidized 安装ruby yum install centos-release-scl yum install rh-ruby23 rh-ruby23-ruby-devel scl enab ...
- centos 7 安装oxidized 实现交换机自动备份
环境: centos 7.4 华为交换机 一.安装 1. yum remove ruby ruby-devel // 卸载系统自带的ruby-devel 2. yum groupinstall ...
- Oxidized-20180912-docker 版本的网络设备备份系统
Problem Oxidized 非常好用,基本兼容所有网络设备的备份,但是有一个小小小小的问题,就是在 Linux 环境下,默认安装的 Ruby 版本问题为其在离线情况下的安装增添了很多的麻烦和限制 ...
- [SCTF2019]Flag Shop erb模板注入
进入题目可以看到一个是要用自己的JinKela去购买flag 这种类型的题目我想到之前都是有一个jwt认证,通过伪造验证信息修改金额以达到购买的效果 点击work抓包可以发现确实有jwt(通过一段字 ...
- 网络设备自动备份工具 Oxidized 使用体验
Oxidized 是一个使用 Ruby 编写的开源网络设备配置备份工具,是 RANCID(思科的一个工具) 的替代品,轻量级且可扩展的 Oxidized 支持 130 多种操作系统. 体验一下它的功能 ...
- Oxidized 网络设备自动备份系统搭建
文章目录 前言 一.oxidized是什么? 二.oxidized搭建 1.环境准备 2.安装步骤 3.配置文件 4.router.db 文件规范 5.运行 6.Nginx验证登录 三,踩坑总结 前言 ...
最新文章
- 钱学森在30年前对虚拟现实和元宇宙的思考
- Powershell指令集_2
- python爬虫系列之数据的存储(二):csv库的使用
- python测试开发django-44.xadmin上传图片和文件
- Number With The Given Amount Of Divisors(反素数)
- 大数据面试-05-大数据工程师面试题
- CXF 生成Web Service Client(将WSDl 转化成 Java代码)
- hive-2.3.3安装指北
- 20180514 ++i和i++
- 一周信创舆情观察(11.1~11.7)
- linux 查看内存大小命令,Linux查看命令:CPU型号,内存大小,硬盘空间
- 如何写出优秀的数据报告分析
- 基于Pytorch中的Dataset和Dataloader读取Voc类目标检测数据集
- Python编曲实践(九):如何计算并估计音乐的调性(大/小调+主音)?Krumhansl-Schmuckler调性分析算法的原理与实现
- WPF UserControl响应PreviewKeyDown事件方法
- CeSi 进程集中管理部署
- 【名称解释】上解中央支出
- 海外 网易云音乐无法正常使用 极简
- 使用UnrealPak.exe创建Pak文件
- Nature | 植物与病原菌“军备竞赛”的“化学装备” 何祖华研究组在水稻广谱抗病的免疫代谢机制上取得重大进展...