创建正则表达式对象

#以大写字母开始后面紧跟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的更多相关文章

  1. Ruby Regexp类

    正则表达(Regexp)类 更新:2017/06/18 改变[]集合的表格大小 80% ---> 100%  定义 正则表达: 和字符串匹配的模式(pattern)的写法 正则表达(Regexp ...

  2. Foreman 企业级配置管理解决方案

    Foreman 企业级配置管理解决方案 Foreman 企业级配置管理解决方案 笔记本 puppet foreman 构建运维体系 本文是构建运维体系的其中一个关键环节. 什么是 foreman Fo ...

  3. 利用docker部署oxidized网络设备备份系统

    随着网络设备的增多,通过人手备份网络设备倍感压力,而且效率低.有编程基础的人可能会通过Python的parimiko 或者netmiko 连接到设备操作 把文件通过ftp 上传到FTP服务器, 在通过 ...

  4. ruby中Regexp用法

    Regexp 正则表达式的类.正则表达式的字面值是以双斜线内夹表达式的形式生成的. /^this is regexp/ 还可以使用Regexp.new(string)来动态地生成正则表达式对象. 超类 ...

  5. ruby 正则表达式Regexp

    ruby正则表达式在线编辑器:rubular 一般规则: /a/匹配字符a.      /\?/匹配特殊字符?.特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), + ...

  6. Ruby中字符串与正则表达式的问题

    Ruby的正则表达式为Regexp类的对象 主要的元语言字符 記号 意味 例 説明 ^ 行頭 /^abc/ abcで始まる行 $ 行末 /abc$/ abcで終わる行 . 任意の1文字 /a.b/ a ...

  7. [No000010]Ruby 中一些百分号(%)的用法小结

    #Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...

  8. ruby学习总结05

    1.数值类(Numeric) 有理数:Rational(分子,分母) 复数:Complex(实数,虚数) 随机数:Rnadom   rand()  返回比1小的浮点数,rand(种子数)  返回0到该 ...

  9. ruby条件控制结构

    一.比较语句 大部分和其他的语言一样,这里注意<=>. 条件语句 如下几种形式 if if ..else.. end if..elsif..else..end unless(if not) ...

随机推荐

  1. 常用http请求状态码含义

    1**  ----临时响应 2**  ----成功响应 3**  ----重定向 4**  ----请求错误 5**  ----服务器错误 常用的几个如下: 200---服务器成功返回网页 301-- ...

  2. 基于tcpdump实例讲解TCP/IP协议

    前言 虽然网络编程的socket大家很多都会操作,但是很多还是不熟悉socket编程中,底层TCP/IP协议的交互过程,本文会一个简单的客户端程序和服务端程序的交互过程,使用tcpdump抓包,实例讲 ...

  3. JavaScript 阶段总结

  4. jsonp跨域请求数据实例——手机号码查询

    前言 网上有很多开放的api,我们在本地通过ajax获取数据时,总会碰到一个问题,那就是跨域!如果不借助php等,仅仅通过js怎么解决跨域的问题呢?或许jsonp是个不错的选择. 知识准备 上篇博客 ...

  5. 1.PHP站内搜索 分类: PHP开发实例 2015-07-31 22:48 4人阅读 评论(0) 收藏

    PHP站内搜索:多关键字.加亮显示 1.SQL语句中的模糊查找 $sql = "SELECT * FROM `message` WHERE `content`like '%$k[0]%' a ...

  6. ubuntu 14.04 apache maven 安装

    下载maven http://maven.apache.org/download.cgi  解压 tar -xzvf apache-maven-3.0.5-bin.tar.gz -C /usr/loc ...

  7. URAL(timus) 1280 Topological Sorting(模拟)

    Topological Sorting Time limit: 1.0 secondMemory limit: 64 MB Michael wants to win the world champio ...

  8. POJ1149 PIGS (网络流)

                                                                             PIGS Time Limit: 1000MS   M ...

  9. SysTick 定时器的使用

    SysTick是STM32中的一个24位的定时器. Cortex‐M3处理器内部包含了一个简单的定时器.因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简.该定时器的时钟 ...

  10. Linux系统编程@多线程与多进程GDB调试

    博客内容参考自 http://www.cnblogs.com/xuxm2007/archive/2011/04/01/2002162.html http://blog.csdn.net/pbymw8i ...