如何在Ruby中的多行字符串中匹配除\ n之外的任何字符?

时间:2013-09-19 12:58:30

标签: ruby regex

def test_period_is_a_shortcut_for_any_non_newline_character
  assert_equal "abc123", "abc\n123"[/.*/m]
end

此测试未通过,因为表达式[/.*/m]返回“abc \ n123”而不是“abc123”。我究竟做错了什么?我使用.表示非换行符,*表示匹配所有符号和m表示多行,但它也会返回\n

2 个答案:

答案 0 :(得分:3)

也许从相反的方向解决问题并删除你不想要的特定字符串是一种解决方案。

"abc\n123".gsub(/\n/, '')

答案 1 :(得分:2)

如果您不想匹配换行符,请从测试中删除/m

来自http://www.regular-expressions.info/ruby.html

  

/m使点匹配换行符。 Ruby确实使用/m,而Perl和许多其他编程语言使用/s来表示“点匹配换行符”。

或者确实来自official documentation

  

/./ - 除换行符之外的任何字符。

     

/./m - 任何字符(m修饰符启用多行模式)

按照目前的情况,你的测试是不可能的,你试图测试Ruby与它的设计相反(幸运的是,它没有)。