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

简介:

 

正则表达式

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

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

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

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

 

Regexp

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

例如

 
  1. /regexp/ 
  2. %r(regexp) 

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

 
  1. /y/.match('haystack') #=> #<MatchData "y"> 

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

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

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

 
  1. /hay/.match('haystack')    #=> #<MatchData "hay"> 

 

Metacharacters and Escapes

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

 
  1. /1 \+ 2 = 3\?/.match('Does 1 + 2 = 3?') #=> #<MatchData "1 + 2 = 3?"> 

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

 
  1. place = "東京都" 
  2. /#{place}/.match("Go to 東京都") 
  3.     #=> #<MatchData "東京都"> 

 

Character Classes

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

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

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

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

 
  1. /[0-9a-f]/.match('9f') #=> #<MatchData "9"> 
  2. /[9f]/.match('9f')     #=> #<MatchData "9"> 

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

 
  1. /[^a-eg-z]/.match('f') #=> #<MatchData "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/,代表一个空白字符,[ \t\r\n\f]/。
  • /\S/,代表一个非空白字符,[^ \t\r\n\f]/。

 

Repetition重复

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

  • * - 0次或多次。

  • + - 1次或多次。

  • ? - 0次或多次。

  • {n} - n次。

  • {n,} - n次或更多。

  • {,m} - m次或更少。

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

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

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

 
  1. /<.+>/.match("<a><b>")  #=> #<MatchData "<a><b>"> 
  2. /<.+?>/.match("<a><b>") #=> #<MatchData "<a>"> 

 




本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1043505,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
4月前
|
Ruby
|
20天前
|
Ruby
探索深究Ruby 正则表达式
【8月更文挑战第30天】
22 1
|
19天前
|
开发者 Ruby
Ruby正则表达式的奥秘:如何用简单的语法构建强大的文本匹配与处理工具?
【8月更文挑战第31天】正则表达式是文本匹配的强大工具,通过简单模式即可实现复杂文本处理。作为动态、面向对象的语言,Ruby提供了全面的正则表达式支持,涵盖创建、匹配、替换及分割等功能。本文通过示例代码介绍如何在Ruby中使用正则表达式进行文本匹配,并分享了编写正则表达式的最佳实践,帮助开发者提升文本处理效率与准确性,更好地利用这一工具构建高效系统。
22 0
|
2月前
|
移动开发 vr&ar 索引
正则表达式 RegExp【详解】
正则表达式 RegExp【详解】
34 0
|
4月前
|
XML JavaScript 前端开发
【JavaScript | RegExp】正则表达式
【JavaScript | RegExp】正则表达式
42 4
|
4月前
|
机器学习/深度学习 Python
正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具
【5月更文挑战第12天】正则表达式是文本处理工具,Python的re模块支持其使用。元字符如.、*、+、?等在正则表达式中具有特殊含义,用于指定匹配规则。示例中,通过正则表达式模式匹配字符串中的电子邮件地址,并使用re.findall()找出所有匹配项。
51 4
|
4月前
|
安全
正则表达式(Regular Expression,简称regex或regexp)
正则表达式(Regular Expression,简称regex或regexp)
52 2
|
4月前
|
机器学习/深度学习 Rust JavaScript
Rust 笔记:Rust 语言中应用正则表达式
Rust 笔记:Rust 语言中应用正则表达式
373 1
|
4月前
|
数据采集 监控 Go
掌握Go语言正则表达式:regexp包全面解析
掌握Go语言正则表达式:regexp包全面解析
167 0