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

如何匹配Ruby中多行字符串中\n以外的任何字符?,ruby,regex,Ruby,Regex,此测试未通过,因为表达式[/.*/m]返回“abc\n123”而不是“abc123”。我做错了什么?我使用来匹配非换行字符,*来匹配所有字符,m来匹配多行字符,但它也会返回\n。如果不想匹配换行符,则从测试中删除/m 发件人: /m使点与换行符匹配。Ruby确实使用/m,而Perl和许多其他编程语言使用/s表示“点匹配换行符” 或者确实是从以下方面: /./-除换行符以外的任何字符 //m-任何字符(m修饰符启用多行模式) 就目前而言,您的测试是不可能的,您正在尝试测试Ruby是否做了与设计相反

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

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

发件人:

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

或者确实是从以下方面:

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

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


就目前而言,您的测试是不可能的,您正在尝试测试Ruby是否做了与设计相反的事情(幸运的是,它没有做到)。

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

发件人:

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

或者确实是从以下方面:

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

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


就目前而言,您的测试是不可能的,您正在尝试测试Ruby是否做了与设计相反的事情(幸运的是,它没有做到)。

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

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

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

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

卸下
m
?这是dotall标志删除
m
?那是多特旗