def test_period_is_a_shortcut_for_any_non_newline_character
assert_equal "abc123", "abc\n123"[/.*/m]
end
此测试未通过,因为表达式[/.*/m]
返回“abc\n123”而不是“abc123”。我究竟做错了什么?我.
用于非换行符,*
匹配所有和m
多行,但它也返回\n
。
如果您不想匹配换行符,请/m
从测试中删除
来自http://www.regular-expressions.info/ruby.html:
/m
使点匹配换行符。Ruby 确实使用/m
,而 Perl 和许多其他编程语言使用/s
“点匹配换行符”。
或者确实来自官方文档:
/./
- 除换行符以外的任何字符。
/./m
- 任何字符(m 修饰符启用多行模式)
就目前而言,您的测试是不可能的,您正在尝试测试 Ruby 是否与它的设计目的相反(幸运的是,它没有)。
也许从相反的方向解决问题并删除您不想要的特定字符串是一种解决方案。
"abc\n123".gsub(/\n/, '')