📅  最后修改于: 2023-12-03 15:04:57.345000             🧑  作者: Mango
在 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 正则表达式的基础知识,还有很多高级的用法和细节需要掌握。建议在实际编程中多加练习,掌握更多的技巧和技能。