📜  Ruby-正则表达式(1)

📅  最后修改于: 2023-12-03 15:04:57.345000             🧑  作者: Mango

Ruby 正则表达式

在 Ruby 中,正则表达式是一种用于匹配文本模式的表达式。 Ruby 中可以使用正则表达式进行字符串匹配、替换、分割等操作,正则表达式也是 Ruby 程序员必须了解的一项基本技能。

正则表达式的基本语法

在 Ruby 中,使用 /.../ 来表示一个正则表达式。例如:

pattern = /hello/

可以使用 =~ 操作符来进行匹配操作。例如:

pattern = /hello/
"hello world" =~ pattern   # 0
"goodbye world" =~ pattern # nil

如果匹配成功,=~ 操作符将返回匹配到的字符串的索引值;如果匹配失败,将返回 nil。

正则表达式的匹配模式

为了更加灵活地匹配字符串,Ruby 正则表达式支持一些匹配模式。常用的匹配模式包括:

  • i:忽略大小写。
  • m:多行匹配,可以使用 ^$ 匹配一行的开头和结尾。
  • x:忽略空格和注释,可以写出更加易读的模式。

示例:

pattern = /hello/i
"HELLO world" =~ pattern   # 0

pattern = /^hello/m
"hello\nworld" =~ pattern   # 0

pattern = /hello world/x
"hello world" =~ pattern   # 0
正则表达式的元字符

在 Ruby 正则表达式中,一些字符具有特殊的含义,称之为元字符。有些元字符只有在特定的上下文中才有特殊的含义,有些则在所有环境中都是元字符。

下面是一些常用的元字符:

  • ^:匹配文本的开头。
  • $:匹配文本的结尾。
  • .:匹配任意字符,除了换行符。
  • |:匹配两个正则表达式之一。
  • []:用于定义一个字符集合。
  • [^]:用于定义一个不在字符集合中的字符。
  • *:匹配前面的表达式零次或多次。
  • +:匹配前面的表达式一次或多次。
  • ?:匹配前面的表达式零次或一次。
  • {n,m}:匹配前面的表达式至少 n 次,至多 m 次。
  • ():用于分组,也可以用于捕获匹配的文本。

示例:

pattern = /^hello/
"hello world" =~ pattern   # 0

pattern = /world$/
"hello world" =~ pattern   # 6

pattern = /h.llo/
"hello world" =~ pattern   # 0

pattern = /hello|goodbye/
"goodbye world" =~ pattern   # 0

pattern = /[aeiou]/
"hello world" =~ pattern   # 1

pattern = /[^aeiou]/
"hello world" =~ pattern   # 0

pattern = /hello*/
"helllo world" =~ pattern  # 0

pattern = /hello+/
"helllo world" =~ pattern  # 0

pattern = /hello?/
"hel world" =~ pattern     # 0

pattern = /\d{3}-\d{4}/
"my number is 123-4567." =~ pattern  # 13

pattern = /(hello) (world)/
"hello world" =~ pattern   # 0
$1                         # "hello"
$2                         # "world"
正则表达式的替换和分割

除了匹配操作,Ruby 正则表达式还支持替换和分割操作。

使用 gsub 方法可以用一个字符串替换匹配到的文本:

"hello world".gsub(/hello/, "hi")  # "hi world"

使用 split 方法可以根据正则表达式来分割字符串:

"hello,world" =~ /,/
$`        # "hello"
$&        # ","
$'        # "world"
"hello,world".split(/,/)  # ["hello", "world"]
结语

这只是 Ruby 正则表达式的基础知识,还有很多高级的用法和细节需要掌握。建议在实际编程中多加练习,掌握更多的技巧和技能。