跳到主要内容

Ruby 正则表达式 Regexp

正则表达式用于匹配文本模式。Ruby 对正则支持很好,适合日志分析、表单校验、文本提取和简单解析。

基本匹配

text = "sensor-001"

if text.match?(/sensor-\d+/)
puts "matched"
end

/sensor-\d+/ 是一个 Regexp 对象。\d+ 表示一个或多个数字。

match 和 match?

match? 只返回布尔值:

"abc123".match?(/\d+/)

match 会返回匹配结果对象:

match = "abc123".match(/(\d+)/)
puts match[1] if match

捕获内容

line = "temperature=26.5"

if match = line.match(/temperature=(\d+\.\d+)/)
puts match[1]
end

括号会捕获内容,match[1] 表示第一个捕获组。

替换

text = "error 404, error 500"
puts text.gsub(/\d+/, "CODE")

gsub 会替换所有匹配项。

常见模式

匹配数字:

/\d+/

匹配单词字符:

/\w+/

匹配空白:

/\s+/

行首和行尾:

/^ERROR/
/done$/

正则不要滥用

简单分隔文本时,split 更清楚:

"a,b,c".split(",")

结构化数据应该使用对应解析器,例如 JSON 用 JSON.parse,CSV 用 CSV

小练习

  1. 判断字符串是否包含数字。
  2. "id=123" 中提取 123
  3. 把字符串中的连续空白替换成一个空格。

小结

Regexp 很强,但要用在真正需要模式匹配的地方。初学时先掌握 match?match、捕获组和 gsub