若第二参数是Fixnum的话,其值可以任选下列中的若干项
Regexp::IGNORECASE
Regexp::MULTILINE
Regexp::EXTENDED
若第二参数并非Fixnum,则被看作是布尔值。若为真(nil,false以外的值)的话,其效果等同于指定了Regexp::IGNORECASE。
若指定了第三参数的话,进行匹配时将使用指定的字符编码而不受$KCODE的影响。字符编码只取决于字符串参数的首字符,这同给$KCODE赋值时的原则是一致的。
若第一参数是正则表达式的话,将拷贝并返回一个内容相同(但是,上述标识的内容将被清楚)的正则表达式。此时将按照第二、第三参数的要求对复制的正则表达式进行设定。
ruby 1.8 特性:若第一参数为正则表达式,则对其进行复制并返回复制结果。此时将忽略第二、第三参数的规定,但会出现警告。
若正则表达式的编译失败,则引发RegexpError异常。
Regexp.escape(string[,kcode])
Regexp.quote(string[,kcode])
在string中的“特殊字符”前面插入转义字符(反斜线)后返回该字符串,这里的“特殊字符”是指那些在正则表达式中具有特殊意义的字符。此时,以可选参数kcode来设定字符串的字符编码(省略时使用$KCODE的值)。
指定字符编码的方法与$KCODE相同。
Regexp.last_match
返回当前范围内的最后一次正则表达式匹配的MatchData对象。调用该方法与调用$~是一样的。
/(.)(.)/ =~ "ab"
p Regexp.last_match # =>#<MatchData:0x4599e58>
p Regexp.last_match[0] # =>"ab"
p Regexp.last_match[1] # =>"a"
p Regexp.last_match[2] # =>"b"
p Regexp.last_match[3] # =>nil
Regexp.last_match([nth]) ((<ruby 1.7 特性>))
若整数nth为0,则返回匹配的字符串($&)。除此以外,则返回与第nth个括号相匹配的部分字符串($1,$2,...)。若没有相应的括号或未完成匹配,则返回nil。
/(.)(.)/ =~ "ab"
p Regexp.last_match # =>#<MatchData:0x4599e58>
p Regexp.last_match(0) # =>"ab"
p Regexp.last_match(1) # =>"a"
p Regexp.last_match(2) # =>"b"
p Regexp.last_match(3) # =>nil
若整个正则表达式都没有成功匹配时,无参数的Regexp.last_match会返回nil,因此last_match[1]就会引发NameError异常。而last_match(1)却返回nil。
Regexp.union([pattern, ...]) ((<ruby 1.8 特性>)) version 1.8.1 以后
用|将传给参数的pattern连起来之后,以Regexp的形式将其返回。只要与其中的一个pattern相匹配,就意味着与Regexp相匹配。
p Regexp.union(/a/, /b/, /c/) #=>/(?-mix:a)|(?-mix:b)|(?-mix:c)/
pattern可以是Regexp或String。若是String的话,则意味着要与该字符串本身相匹配,随后该pattern将被纳入Regexp之中。
p Regexp.union("a", "?", "b") # =>/a|\?|b/
p Regexp.union(/a/, "*") # =>/(?-mix:a)|\*/
若没有任何参数时,则返回一个绝对不会匹配的Regexp。
p Regexp.union() # =>/(?!)/
最终返回的Regexp的字符编码与传给参数的Regexp的字符编码相一致。若同时给出了若干个编译过的固定编码Regexp时,这些编码必须一致。若存在不同编码的Regexp时,将引发ArgumentError。
p Regexp.union(/a/e, /b/e) # =>/(?-mix:a)|(?-mix:b)/e
p Regexp.union(/a/e, /b/s) # =>ArgumentError
若同时存在固定编码Regexp和非固定编码Regexp时,最终返回的Regexp的编码以那个固定编码为准。
p Regexp.union(/a/e, /b/) # =>/(?-mix:a)|(?-mix:b)/e
方法:
self =~ string
self === string
与string字符串进行正则表达式的匹配操作。若匹配成功则返回匹配位置的索引(首位为0)。若匹配失败或者string为nil时,返回nil。
内部变量$~中保存的是与匹配相关的信息。
若string既非nil又非String对象时,引发TypeError异常。
ruby 1.7 特性:Regexp#=== 返回布尔值。若参数并非字符串或匹配失败则返回false,若匹配成功则返回true。
~ self
与$_变量的值之间进行匹配操作。等同于
self =~ $_
casefold?
若编译正则表达式时不区分大小写,则返回真。
kcode
采用与$KCODE相同的形式返回编译正则表达式时的字符编码。若编译正则表达式时没有固定的编码(使用匹配时的$KCODE的值)时,返回nil。
match(str)
match(str, [pos]) ((<ruby 1.9 特性>))
除去返回MatchData对象这点区别以外,它与self =~ str是相同的。匹配失败时返回nil。
若只想得到与正则表达式相匹配的部分字符串时,可以
bar = /foo(.*)baz/.match("foobarbaz").to_a[1]
foo, bar, baz = /(foo)(bar)(baz)/.match("foobarbaz").to_a.indexes(1,2,3)
这样。(之所以使用to_a是因为考虑到可能会出现匹配失败的情况。)
正则表达式是一个特殊的字符序列,可以帮助您使用模式中保留的专门语法来匹配或查找其他字符串或字符串集。 正则表达式在UNIX世界中被广泛使用。
注:很多开发人员觉得正则表达式比较难以理解,主要原因是缺少使用或不愿意在这上面花时间。
re模块在Python中提供对Perl类正则表达式的完全支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re.error。
在这篇文章中,将介绍两个重要的功能,用来处理正则表达式。 然而,首先是一件小事:有各种各样的字符,这些字符在正则表达式中使用时会有特殊的意义。 为了在处理正则表达式时避免混淆,我们将使用:r'expression'原始字符串。
匹配单个字符的基本模式
编译标志可以修改正则表达式的某些方面。标志在re模块中有两个名称:一个很长的名称,如IGNORECASE,和一个简短的单字母形式,如。
1.match函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是函数的语法 :
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.match函数在成功时返回匹配对象,失败时返回None。使用match(num)或groups()函数匹配对象来获取匹配的表达式。
示例
当执行上述代码时,会产生以下结果 :
2.search函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是这个函数的语法 :
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.search函数在成功时返回匹配对象,否则返回None。使用match对象的group(num)或groups()函数来获取匹配的表达式。
示例
当执行上述代码时,会产生以下结果 :
3.匹配与搜索
Python提供基于正则表达式的两种不同的原始操作:match检查仅匹配字符串的开头,而search检查字符串中任何位置的匹配(这是Perl默认情况下的匹配)。
示例
当执行上述代码时,会产生以下结果 :
4.搜索和替换
使用正则表达式re模块中的最重要的之一是sub。
模块
此方法使用repl替换所有出现在RE模式的字符串,替换所有出现,除非提供max。此方法返回修改的字符串。
示例
当执行上述代码时,会产生以下结果 :
5.正则表达式修饰符:选项标志
正则表达式文字可能包含一个可选修饰符,用于控制匹配的各个方面。 修饰符被指定为可选标志。可以使用异或(|)提供多个修饰符,如前所示,可以由以下之一表示 :
6.正则表达模式
除了控制字符(+ ? . * ^ $ ( ) [ ] { } | ),所有字符都与其自身匹配。 可以通过使用反斜杠将其转换为控制字符。
7.正则表达式示例
字符常量
字符类
特殊字符类
重复匹配
非贪婪重复
这匹配最小的重复次数 :
用圆括号分组
反向引用
这与以前匹配的组再次匹配 :
备择方案
python|perl : 匹配“python”或“perl”
rub(y|le) : 匹配 “ruby” 或 “ruble”
Python(!+|?) : “Python”后跟一个或多个! 还是一个?
锚点
这需要指定匹配位置。
带括号的特殊语法
开课吧广场-人才学习交流平台-开课吧
你应该是看驱动,而不是看redis,你的驱动支持什么版本就能使用什么版本的redisredis-rb
A Ruby client library for Redis.
A Ruby client that tries to match Redis' API one-to-one, while still providing an idiomatic interface. It features thread-safety, client-side sharding, pipelining, and an obsession for performance.
没有说明不支持某些版本