11. 正则表达式 (Regular Expressions)

  • 避免使用 $1-9 因为可能难以辨认出是哪一个,取个名。
      #  错误
      /(regexp)/ =~ string
      ...
      process $1
      #  正确
      /(?<meaningful_var>regexp)/ =~ string
      ...
      process meaningful_var
    
  • 小心使用 ^$ 因为它们匹配的是行头/行末,而不是某个字符串的结尾. 如果你想匹配整个字符串, 用: \A\z
      string = "some injection\nusername"
      string[/^username$/]   #  matches
      string[/\Ausername\z/] #  don't match
    
  • 使用 x 修饰符在复杂的正则表达式上。这使得它更可读, 并且你可以加有用的注释。只是要注意空格会被忽略。
      regexp = %r{
        start         #  some text
        \s            #  white space char
        (group)       #  first group
        (?:alt1|alt2) #  some alternation
        end
      }x