2013-07-10 13 views
9

非常に長い正規表現がある場合、キュウリのステップ定義のように、行を折り返すのに最適な方法は何でしょうか?あなたは、2つのラインにRuby正規表現が行に収まらないとき

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

ブレークアップ(このdoesntの仕事:)

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

短い正規表現を使用しますか? oO –

+0

2行で分割するとどういう意味ですか? '\ n'ですか? –

+0

'x'修飾子を使うことができます... – HamZa

答えて

13

あなたが/x修飾子でverbose regexを使用することができますが、:

の例では、私のような何かをしたいと思いますスペースを明示的に指定する必要があります。スペースを明示的に無視するためです。

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

うーん、良い提案が、私はステップの定義をより読みやすくするとは思わない。 – SirLenz0rlot

+1

@ SirLenz0rlotこれが読めるようにならないならば、あなたは他のオプションを持たないと思う。** **構造化された/読める正規表現。それ以外の場合は、エディタを使用して線を「折り返し」ます。 – HamZa

+0

よろしくお願いいたします。より洗練されたソリューションが存在することを期待していました。 – SirLenz0rlot

1

/a\ 
b/ 
# => /ab/ 
+0

は2行目にインデントしたときに台無しになります – SirLenz0rlot

-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) { 
    ... 
} 

考え方は、Regexを変数に保存し、その変数を正規表現内に書き込むことです。

+0

実際にはルビの可能性があります。しかし、キュウリの段階定義の場合、読みやすさを高めることはできません – SirLenz0rlot

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$/ 
関連する問題