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"
else
print "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)+(.)/ =~ " p $1 #=>1 p $2 #=>45 p $3 #=>6 /(.)(?:\d\d)+(.)/ =~ " 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.new
other = scantest.scan(/i./){|matched|
gather.unshift(matched)
}
p gather #=>["in", "is", "is"]
当使用()的时候,如果匹配部分为一个变量,则会传递数组给变量,如:
scantest = "This is a string test for scan"
gather = Array.new
scantest.scan(/(i)(.)/){|matched|
gather.unshift(matched)
}
p gather #=>[["i", "n"], ["i", "s"], ["i", "s"]]
如果匹配块儿中的变量为多个,不会传递数组,而是传递元素,如:
scantest = "This is a string test for scan"
gather = Array.new
scantest.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.new gather = scantest.scan(/i./) p gather #=>["is", "is", "in"]
Ruby Regexp的更多相关文章
- Ruby Regexp类
正则表达(Regexp)类 更新:2017/06/18 改变[]集合的表格大小 80% ---> 100% 定义 正则表达: 和字符串匹配的模式(pattern)的写法 正则表达(Regexp ...
- Foreman 企业级配置管理解决方案
Foreman 企业级配置管理解决方案 Foreman 企业级配置管理解决方案 笔记本 puppet foreman 构建运维体系 本文是构建运维体系的其中一个关键环节. 什么是 foreman Fo ...
- 利用docker部署oxidized网络设备备份系统
随着网络设备的增多,通过人手备份网络设备倍感压力,而且效率低.有编程基础的人可能会通过Python的parimiko 或者netmiko 连接到设备操作 把文件通过ftp 上传到FTP服务器, 在通过 ...
- ruby中Regexp用法
Regexp 正则表达式的类.正则表达式的字面值是以双斜线内夹表达式的形式生成的. /^this is regexp/ 还可以使用Regexp.new(string)来动态地生成正则表达式对象. 超类 ...
- ruby 正则表达式Regexp
ruby正则表达式在线编辑器:rubular 一般规则: /a/匹配字符a. /\?/匹配特殊字符?.特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), + ...
- Ruby中字符串与正则表达式的问题
Ruby的正则表达式为Regexp类的对象 主要的元语言字符 記号 意味 例 説明 ^ 行頭 /^abc/ abcで始まる行 $ 行末 /abc$/ abcで終わる行 . 任意の1文字 /a.b/ a ...
- [No000010]Ruby 中一些百分号(%)的用法小结
#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...
- ruby学习总结05
1.数值类(Numeric) 有理数:Rational(分子,分母) 复数:Complex(实数,虚数) 随机数:Rnadom rand() 返回比1小的浮点数,rand(种子数) 返回0到该 ...
- ruby条件控制结构
一.比较语句 大部分和其他的语言一样,这里注意<=>. 条件语句 如下几种形式 if if ..else.. end if..elsif..else..end unless(if not) ...
随机推荐
- Windows Phone,向localdatabase中插入时间数据出现不能转换的错误
在开发一个小程序时,使用到了DateTime类型的 DBType, 当向数据库中插入一条信息时,报错说是DateTime类型不能转换. 后来发现是系统给我的DateTime类型的列赋予了个初值,而这个 ...
- Xcode Snippets
在Double Encore,我们写的代码都是干净,可重用的——不过,有时候并不能完全做到.如在使用pragma mark的时候.下面就是一个示例: #pragma mark - UIViewCo ...
- 【题解】【BST】【Leetcode】Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.思路: ...
- B3log部署文档
https://github.com/b3log/solo/wiki/standalone_mode 独立模式 只要已经安装好了 Java 环境,一个命令就能启动! 不依赖 MySQL 数据库,而是使 ...
- 使用jQuery设置disabled属性与移除disabled属性
Readonly只针对input和textarea有效,而disabled对于所有的表单元素都有效,下面为大家介绍下使用jQuery设置disabled属性 表单中readOnly和disable ...
- hdu 5203
题目大意: 有n根连续的木棒,其中有m根是坏的,现在要求将木棒切成连续的四段,使得其中三段中都不包含坏的木棒,且三段木棒的长度和最大,在最长的前提下看这三段木棒能否拼成三角形,如果能的话,问最多有多少 ...
- Apache与Nginx服务器对比
apache NginX 占用资源和内存 多 轻量级,同样起Web服务,占内存和资源更少 阻塞型 抗并发,异步非阻塞的,高并发下,可保持低资源低消耗低性能 可用的模块超多 可自定义模块,编 ...
- Linux下解决“shutdown: command not found"问题
今天关机时,使用shutdown来执行此操作,但出现了一个"bash:shutdown:command not found"错误提示.这让我很困惑,这个命令在系统中是肯定存在的,但 ...
- css 属性积累
1. letter-spacing:6px; //属性增加或减少字符间的空白(字符间距) 2. cursor // 鼠标移上去的鼠标状态 属性值有: ...
- Matlab位运算笔记
本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) ...