Ruby正则表达式匹配Ruby字符串插值

时间:2016-07-02 16:13:00

标签: ruby regex escaping

我正在尝试构造一个正则表达式,它将匹配任何包含字符串插值的Ruby字符串,例如:

"This will contain my #{string}"

我想出了:

/".*#{.*}.*"/

#{}被解释为插值。我如何从字面上表达#{}

2 个答案:

答案 0 :(得分:0)

在分配字符串时可以使用单引号来避免插值并按字面表达#{}

my_template = 'This will contain my #{string}'
# => "This will contain my \#{string}"

或者你可以使用双引号并用斜杠转义#符号(如上面语句的返回值所示)。

还有另一个interpolation technique described here可能会有所帮助:

greeting = 'hello %s, my name is %s!'
interpolated = greeting % ['Mike', 'John']
# => "hello Mike, my name is John!"

然后你可以用你的正则表达式检测%s,但仍然能够轻松地插入&使用字符串作为模板。

答案 1 :(得分:0)

描述

#\{([^}]*)\}

Regular expression visualization

**要更好地查看图像,只需右键单击图像并在新窗口中选择视图

此正则表达式将执行以下操作:

  • 匹配#{....}结构
  • 包围的子字符串
  • 将括号内的子字符串捕获到Capture Group 1
  • 递归不起作用

实施例

现场演示

https://regex101.com/r/vR6mU9/1

示例文字

This will contain my #{string}

样本匹配

MATCH 1
Capture group 0: #{string}
Capture group 1: `string`

解释

NODE                     EXPLANATION
----------------------------------------------------------------------
  #                        '#'
----------------------------------------------------------------------
  \{                       '{'
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    [^}]*                    any character except: '}' (0 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  \}                       '}'
----------------------------------------------------------------------