ruby 正则表达式Regexp
ruby正则表达式在线编辑器:rubular
一般规则:
/a/匹配字符a。
/\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *.
.匹配任意字符,例如/a./匹配ab和ac
/[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/
/[^a-zA-Z0-9]/匹配不在该范围内的字符串
/[\d]/代表任意数字
/[\w]/代表任意字母,数字或者_
/[\s]/代表空白字符,包括空格,TAB和换行
/[\D]/,/[\W]/,/[\S]/均为上述的否定情况
高级规则:
?代表0或1个字符。/Mrs?\.?/匹配"Mr","Mrs","Mr.","Mrs."(非贪婪)
*代表0或多个字符。/Hello*/匹配"Hello","HelloJack"(贪婪)
+代表1或多个字符。/a+c/匹配:"abc","abbdrec"等等(贪婪)
/d{3}/匹配3个数字
/d{1,10}/匹配1-10个数字
/d{3,}/匹配3个数字以上
/([A-Z]\d){5}/匹配首位是大写字母,后面4个是数字的字符串
锚:
^ 行首
$ 行尾
\A 字符串的开始
\z 字符串的结尾
\Z 字符串的结尾(不包括最后的换行符)
\b 单词边界
正则表达式创建:
r1 = Regexp.new('[Rr]uby')
r2 = /[Rr]by/
# 这种写法类似于字符串数组的创建
r3 = %r{[Rr]uby}
正则表达式修饰符:

常用方法
正则匹配操作符=~ 与 !~
str = <<HERE
Thie is a document.
It contains a lot of date string like 2008-01-02
it's create at 2018-03-21
HERE # 正则表达式
r = /(\d{4})-(\d{2})-(\d{2})/
# 正则表达式 =~ 字符串
# 无法匹配时返回nil匹配成功则返回该字符串起始符位置
# !~与 =~相反,常用于条件判断
p r =~ str
# $1包含的是正则表达式中从左侧开始的第一对小括号内的子模式所匹配的字符串
# 匹配时,是从外到内,从左到右的顺序
p $1 # => "2008"
p $2 # => "01"
p $3 # => "02"
# 匹配部分前的字符串
p $` # => " Thie is a document.\n It contains a lot of date string like "
# 匹配部分的字符串 # => "2008-01-02"
p $&
# 匹配部分后的字符串
p $' # => "\n it's create at 2018-03-21\n"Regexp的match方法
md = r.match(str)
p md #=> #<MatchData "2008-01-02" 1:"2008" 2:"01" 3:"02">
p md.class # => MatchData
p md[0] # => "2008-01-02"
p md[1] # => "2008"
p md[2] # => "01"
p md[3] # => "02"String类的scan方法
# 没有代码块的使用方法返回的是匹配结果数组
matches = str.scan(r)
p matches # => [["2008", "01", "02"], ["2018", "03", "21"]] # 使用代码块对匹配的所有结果进行迭代
str.scan(r) do |year, month, day|
puts "#{year}年#{month}月#{day}日"
end
# => 2008年01月02日
# => 2018年03月21日sub,gsub方法
str = 'abc def g hi'
p str.sub(/\s+/, '&') # => "abc&def g hi"(只替换第一个匹配项)
p str.gsub(/\s+/, '&') # => "abc&def&g&hi"(替换所有匹配项)
参考:
ruby 正则表达式Regexp的更多相关文章
- ruby 正则表达式
Ruby学习笔记-正则表达式 Posted on 2011-11-29 17:55 Glen He 阅读(4998) 评论(0) 编辑 收藏 1.创建正则表达式 a) reg1 = /^[a-z]*$ ...
- javascript类型系统——正则表达式RegExp类型
× 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String ...
- JavaScript学习笔记-正则表达式(RegExp对象)
正则表达式(RegExp对象) 1.正则表达式字面量,在脚本加载后编译.若你的正则表达式是常量,使用这种方式可以获得更好的性能,重复使用时不会重新编译: 2.使用构造函数创建的RegExp,提供了 ...
- 正则表达式(RegExp)
正则表达式(RegExp) 如何按一定规则快速查找到需要找寻的内容,js的设计者们给我们提供了一个叫正则表达式(RegExp对象),专门用于处理类似问题. RegExp对象表示正则表达式,它是对字符串 ...
- JavaScript数据类型 正则表达式RegExp类型
前言 上一篇文章已经介绍了正则表达式的基础语法.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,使用正则表达式可以进行强大的模式匹配和文本检索与替换.本文将 ...
- JavaScript -- 时光流逝(六):js中的正则表达式 -- RegExp 对象
JavaScript -- 知识点回顾篇(六):js中的正则表达式 -- RegExp 对象 1. js正则表达式匹配字符之含义 查找以八进制数 规定的字符. 查找以十六进制数 规定 ...
- JavaScript 正则表达式RegExp 和字符串本身的正则表达式
JavaScript 正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模 ...
- 雷林鹏分享:Ruby 正则表达式
Ruby 正则表达式 正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合. 语法 正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的 ...
- ES9的新特性:正则表达式RegExp
简介 正则表达式是我们做数据匹配的时候常用的一种工具,虽然正则表达式的语法并不复杂,但是如果多种语法组合起来会给人一种无从下手的感觉. 于是正则表达式成了程序员的噩梦.今天我们来看一下如何在ES9中玩 ...
随机推荐
- ibatis Order By注入问题
上周六单位被扫描出SQL注入漏洞 经过检查,发现ibatis框架都可能出现这个问题.如果有需求,让你实现页面grid所有字段都能排序,你会怎么做呢? 最简单的做法就是从页面把字段名,排序类型传回来,然 ...
- Routing Manager for WCF4 z
http://www.codeproject.com/Articles/77198/Routing-Manager-for-WCF Download source Contents Features ...
- Mysql学习---基础操作学习2
基本数据类型 Mysql基本数据类型:二进制,数值[整数,小数].字符串[定长,变长]. 二进制数据.时间和枚举集合 bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认 ...
- February 18 2017 Week 7 Saturday
It is not easy to meet each other in such a big world. 世界这么大,能遇见不容易. Sometimes we choose to trust in ...
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...
- 基于SAP Kyma的订单编排增强介绍
尽管有一万个舍不得,2018年还是无可挽回地离我们远去了. 唯有SAP成都研究院的同事和我去年在网络上留下的这些痕迹,能证明2018年我们曾经很认真地去度过每一天: SAP成都研究院2018年总共87 ...
- mongdb时间类型
Date() 显示当前的时间new Date 构建一个格林尼治时间 可以看到正好和Date()相差8小时,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间ISODate() 也是格林 ...
- 智能机器人“小昆”的实现(五)MainActivty的实现及项目结束
好了,一切准备工作都完成了,下面我们就可以真正的编写MainActivity了.在MainActivity中,我们要为ListView设定适配器,并为发送按钮设定点击事件.我们的逻辑就是点击发送按钮, ...
- 移动端 Touch 事件
在移动端页面开发时,常常会用到touch事件,比如左滑右滑的轮播等.常用的触摸事件有touchstart,touchmove,touchend. 每个事件包含下面三个用于跟踪虎摸的属性: touche ...
- 关于P/Invoke的闲话
P/Invoke,Platform Invoke,平台调用,是.NET打通托管与非托管两个世界的通路,10来年前曾经研究过这方面的技术,还曾发表过相关文章在<程序员>上,呵呵. 昨天有需求 ...