使用Ruby的heredoc语法来读取正则表达式

时间:2017-01-05 16:51:40

标签: ruby heredoc

在我的测试中,我有一个 - 有点长,多行 - HTML响应,包含日期和时间。我以为我可以使用assert_match比较预期结果'\ d {4} - \ d {2} - \ d {2} \ d {2}:\ d {2}'与实际结果'yyyy-mm- dd hh:mm':

assert_match <<END_OF_TEXT, response.body
...
... as at: \d{4}-\d{2}-\d{2} \d{2}:\d{2} UTC
...
END_OF_TEXT

不知何故,似乎无法使用此语法输入正则表达式,即使使用END_OF_TEXT的各种可能的分隔符也是如此。

2 个答案:

答案 0 :(得分:2)

使用Regexp“扩展”模式,该模式启用Freespacing and Comments

assert_match(/\A
  [[:digit:]]+ # 1 or more digits before the decimal point
  (\.          # Decimal point
    [[:digit:]]+ # 1 or more digits after the decimal point
  )? # The decimal point and following digits are optional
\Z/x,
'3.14')

答案 1 :(得分:1)

以下效果很好:

p = Regexp.new <<'END_OF_TEXT'
...
... as at: \d{4}-\d{2}-\d{2} \d{2}:\d{2} UTC
...
END_OF_TEXT
assert_match p, response.body