ruby正则表达

1、Ruby中正则表达式的写法


主要有三种

  • 在//之间,要进行转义

  • 在%r{}内,不用进行转义

  • Regexp.new()内,不用进行转义

/mm\/dd/,Regexp.new(“mm/dd”),%r{mm/dd}三者效果相同,实质都是新建了一个Regexp的类。

2、匹配的两种方法


  • =~肯定匹配, !~否定匹配。=~表达式返回匹配到的位置索引,失败返回nil,符号左右内容可交换

  • regexp#match(str),返回MatchData,一个数组,从0开始,还有match.pre_match返回匹配前内容,match.post_match返回匹配后内容

?





1

2

3

/cat/ =~ "dog and cat" 
#返回8

mt = /cat/.match("bigcatcomes")

"#{mt.pre_match}->#{mt[0]}<-#{mt.post_match}"
#返回big->cat<-comes

3、替换

很多时候匹配是为了替换,Ruby中进行正则替换非常简单,两个方法即可搞定,sub()+gsub()。
sub只替换第一次匹配,gsub(g:global)会替换所有的匹配,没有匹配到返回原字符串的copy

?





1

2

3

str = "ABDADA"

new_str = str.sub(/A/, "*")     #返回"*BDADA"

new_str2 = str.gsub(/A/, "*")   #返回"*BD*D*"

如果想修改原始字符串用sub!()和gsub!(),没有匹配到返回nil。

方法后面还可以跟block,对匹配的字符串进行操作

?





1

a.gsub(/[aeiou]/) {|vowel| vowel.upcase } # => "qUIck brOwn fOx"

4、分组匹配

Ruby的分组匹配与其它语言差别不大,分组匹配表达式是对要进行分组的内容加()。
对于匹配到的结果,可以用系统变量#$1,#$2…索引,也可用matchData数组来索引

?





1

2

3

md = /(\d\d):(\d\d)(..)/.match("12:50am") # md为一个MatchData对象

puts "Hour is #$1, minute #$2"

puts "Hour is #{md[1]}, minute #{md[2]}"

5、匹配所有

regexp#match()只能匹配一次,如果想匹配所有要用regexp#scan()
用法示例:

?





1

"abcabcabz".scan(%r{abc}).each
{|item| puts item} # 输出2行abc

6、贪婪匹配vs懒惰匹配

这两种匹配属于标准正则表达式内容,与Ruby没关,但新手如果不明白匹配时会发生莫名其妙的错误,所以特别总结一下。

  • 贪婪匹配:尽可能多匹配,正则默认是贪婪匹配。例子:a.*b它将会匹配最长的以a开始,以b结束的字符串。对于aabab的匹配结果是aabab。

  • 懒惰匹配:尽可能少匹配。例子:a.*?b对于aabab的匹配结果是aab和ab。

一般是在原来表达式结尾加?就由贪婪匹配变成了懒惰匹配。常用的懒惰限定符有(去年最后的问题就是贪婪匹配):

  • ?重复任意次,但尽可能少重复

  • +?重复1次或更多次,但尽可能少重复

  • ??重复0次或1次,但尽可能少重复

  • {n,m}?重复n到m次,但尽可能少重复

  • {n,}?重复n次以上,但尽可能少重复

ruby正则表达,布布扣,bubuko.com

时间: 2024-10-12 23:56:32

ruby正则表达的相关文章

ruby正则表达以及匹配替换

ruby正则表达式分两种,一种是转义的,一种是不转义的,不转义的我还没用过,所以不知道效果怎么样,这里只讲讲转义的,大体来讲,所有的表达式都被包含在两个/中间,中括号[]内的代表或,就是任意一个,单个字符匹配使用的是\?(?代表要匹配的特殊字符,比如我要匹配右中括号,那么我就可以写\])恩,基本上就这样,下面给出具体范例: /a/ :匹配字符a /[Aa]b/:匹配字符Ab或者ab /\s/匹配所有的空白,比如空格.换行.tab键 /\n/匹配新的一行 /\r/匹配换行,相当于enter键,注:

正则表达示 for Python3

前情提要 从大量的文字内容中找到自己想要的东西,正则似乎是最好的方法.也是写爬虫不可缺少的技能.所以,别墨迹了赶紧好好学吧! 教程来自http://www.runoob.com/python3/python3-reg-expressions.html,感谢菜鸟教程. 一. 在Python3中 正则为 re 模块 import re 二.re.match函数 re.match –>从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话match()就返回none,语法: re.match(p

正则表达示

这里对正则表达示进行一定程度的总结.为避免太过纠结,这里避开一些 鸡肋 的正则用法. 更多文档参考官方文档 http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html 字符 x 字符 x \\ 反斜线字符 \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义

对正则表达这个东西还需要多练习啊

正则表达,如果不配合PHP语言来实现其他功能的话,充其量也就是一行字符串.它最基本的功能就是判断,用来判断某些字符是不是存在于一个已被定义的变量中. 所以,可以用它判断的这个特性来作为function的条件. 另外,正则表达式也具有增删改查的功能,但它最主要的功能就是"查". 最后:从某些方面来说,数据库也算是语言吧.

Java正则表达中Greedy Reluctant Possessive 的区别

上一篇文章<编程思想之正则表达式 >中讲了正则表达式的原理.使用方法和常见的正则表达式总结,本文将进一步探讨Java正则表达中Greedy.Reluctant.Possessive三种策略的区别. 从Java的官方文档http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中我们可以看到,正则表达式表示数量词的符号有三套,分别是Greedy(贪婪的).Reluctant(勉强的)和Possessive(独占的).

Javascript正则构造函数与正则表达字面量&amp;&amp;常用正则表达式

本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达式: 使用new RegExp()构造函数 使用正则表达字面量 先说结果,使用正则表达字面量的效率更高. 下面的示例代码演示了两种可用于创建正则表达式以匹配反斜杠的方法: 1 //正则表达字面量 2 var re = /\\/gm; 3 4 //正则构造函数 5 var reg = new RegE

通过完善邮箱匹配来一步步学习正则表达

首先,在学习之前先确定一下邮箱的格式,邮箱的一般格式为[email protected],其中xxx可为数字.字母.下划线_,中划线-,点号.,加号+等组成. 在看具体代码之前需要先了解一些基础知识 # []表示匹配字符集中的任意一个字符# \w 表示匹配任何字母数字字符# \s表示任何空格字符# \d表示任何十进制数字# +表示匹配1次或多次前面出现的正则表达# *表示匹配0次或多次前面出现的正则表达# (?:)表示一个匹配不用保存的分组 1.匹配最简单的邮箱格式,如[email protec

JavaScript使用正则表达

JavaScript使用正则表达 正则表达式概述 在前面已经涉及了一些正则表达式的用法,现在将系统地学习正则表达式的语法和 用途.正则表达式主要用于进行字符串的模式匹配,例如判断一个字符串是否符合指定格式等.例如在windows下搜索文件,可以用“*”或者“?”这样的 通配符.在正则表达式的语法中,有更多这样的符号用于表示一个字符串的模式,表7.1列出了所有的特殊符号,它们也被称为元字符. 使用这些元字符,可以表示具有特定模式的字符串,例如: /^\s*$/:匹配一个空行. /\d{2}-\d{

shell正则表达二

shell正则表达 二部分 一.printf命令: 1. 格式化输出.(print  format) 2. 命令格式: printf'打印格式'实际内容 1. 打印格式: 1) \a(警告声音输出) 1) \b(退格键) 1) \n(输出新的一行) 1) \r(帧处于行的开始,即enter键) \t(水平的table键) 1) \v(垂直的table键) 1) \xNN(x为ASCII码十六进制表示:NN为俩位数数字:可转换数字成为字符) 1) %ns(n为数字:s代表string,即多少个字符