栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Ruby开发

Ruby笔记《一》Regexp正则表达式

Ruby开发 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ruby笔记《一》Regexp正则表达式

 

正则表达式

正则表达式在很多场景都适用。例如,验证字符串是否匹配格式,查找匹配的字符串,替换匹配的字符串。

很多编程语言都支持正则表达式,语法也相近。

正则表达式由两部分组成:模式和匹配字符串。

通常我们说的写一个正则表达式,就是写一个模式。然后验证一些输入的字符串是否匹配这个模式。

 

Regexp

在ruby中模式叫做Regexp。用/.../或者%r(...)包起来的内容就是这个Regexp。

例如

/regexp/ 

%r(regexp) 

haystack中包含y,所以他们就匹配了。

/y/.match('haystack') #=> # 

haystack中不包含needle,所以就不匹配,返回nil。

/needle/.match('haystack') #=> nil 

haystack中包含hay,所以就匹配。

/hay/.match('haystack')    #=> # 

 

metacharacters and Escapes

字符(, ), [, ], {, }, ., ?, +, *都是元字符,在模式中特殊的含义,如果想要匹配这些字符串的,需要在它们前面加上反斜杠,使得这些特殊字符从模式中escape,代表普通的字符。

/1 + 2 = 3?/.match('Does 1 + 2 = 3?') #=> # 

 

ruby表达式也可以嵌入到模式中,只要写在#{...}中就可以。

place = "東京都" 

/#{place}/.match("Go to 東京都") 

    #=> # 

 

Character Classes

用[]括起来的一些字符,看他们是否在match中出现。/[ab]/代表a或b,/ab/代表a后面要跟着b。

/W[aeiou]rd/.match("Word") #=> # 

用-连接的两个字符,代表一个范围,[a-d]和[abcd]是一个意思。

[]中可以包含多个范围[a-dx-z]和[abcdxyz]是一个意思。

/[0-9a-f]/.match('9f') #=> # 

/[9f]/.match('9f')     #=> # 

^代表相反的意思,就是除了模式中^后面的内容。

/[^a-eg-z]/.match('f') #=> # 

/./,代表任意字符,新行除外。

/./m,代表任意字符,m代表可以匹配多行。

/w/,代表一个字符,[a-zA-Z0-9]。

/W/,代表一个非字符,[^a-zA-Z0-9]。

/d/,代表一个数字,[0-9]。

/D/,代表一个非数字,[^0-9]。

/h/,代表一个十六进制字符,[0-9a-fA-F]。

/H/,代表一个非十六进制字符,[^0-9a-fA-F]。

/s/,代表一个空白字符,[ trnf]/。

/S/,代表一个非空白字符,[^ trnf]/。

 

Repetition重复

重复符号可以指明字符重复的次数。

* - 0次或多次。

+ - 1次或多次。

? - 0次或多次。

{n} - n次。

{n,} - n次或更多。

{,m} - m次或更少。

{n,m} - 最少n次,最多m次。

重复默认是贪婪的,它会尽力向后匹配,匹配更多的内容。懒惰匹配只找到最近的匹配字符串,只做最少量的匹配。

通过添加?就可以使贪婪变成懒惰。

/<.+>/.match("")  #=> #"> 

/<.+?>/.match("") #=> # 

 

 

 

参考文献

1.Regexp

2.SEO需要掌握的正则表达式

 

©著作权归作者所有:来自51CTO博客作者virusswb的原创作品,如需转载,请注明出处,否则将追究法律责任

rubyregexregexp


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号