当Ruby正则表达不适合在线

时间:2013-07-10 08:27:48

标签: ruby regex cucumber

当我有一个非常长的正则表达式时,就像黄瓜步骤定义一样,最好的换行方式是什么?

例如,我想要像:

When /^I have a very long step definition here in my step definition file$/ do
  ...
end

分成两行(这不起作用:)

When /^I have a very long step definition here in /\
    /my step definition file$/ do
  ...
end

2018更新

如果您专门用于黄瓜,使用cucumber expressions是正则表达式的绝佳选择

4 个答案:

答案 0 :(得分:14)

您可以将verbose regex/x修饰符一起使用,但是您需要明确显示空格,否则将忽略它们。另一个优点是,这允许您评论您的正则表达式(如果它很长,可能是一个好主意):

/^                               # Match start of string
I[ ]have[ ]a[ ]very[ ]long[ ]
step[ ]definition[ ]here[ ]
in[ ]my[ ]step[ ]definition[ ]file
$                               # Match end of string
/x

答案 1 :(得分:1)

怎么样?
/a\
b/
# => /ab/

答案 2 :(得分:1)

字符串到正则表达式转换怎么样?你会丢失语法高亮,但我会说它不是太糟糕了?

When( Regexp.new(
  '^My long? regex(?:es) that are '\
  '(?:maybe ) broken into (\d+) lines '\
  'because they (?:might )be non-readable otherwise$'
)) do |lines|
  ...
end
# => /^My long? regex(?:es) that are (?:maybe ) broken into (\d+) lines because they (?:might )be non-readable otherwise$/

答案 3 :(得分:-2)

我知道你想在Ruby中使用它,但我可以举例说明如何在Perl中实现它。我真的认为你也可以在Ruby中使用这个想法。

my $re1 = "I have a very long step definition here in";
my $re2 = "my step definition file";

if ( $line =~ m/^$re1 $re2$/i ) {
    ...
}

这个想法是将正则表达式保存到变量中并在正则表达式中写入变量。