2013-07-10 17 views
9

Kiedy mam bardzo długie wyrażenie regularne, takie jak definicja kroku ogórka, jaki byłby najlepszy sposób na zawijanie linii?Kiedy regex Ruby nie pasuje do linii

przykład, chciałbym coś takiego:

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

rozpadają się na dwie linie (to robi praca :)

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

Użyj krótszego wyrażenia regularnego? oO –

+0

co masz na myśli, mówiąc o zerwaniu w 2 liniach? '\ n'? –

+0

Możesz użyć modyfikatora 'x' ... – HamZa

Odpowiedz

13

Można użyć verbose regex z modyfikatorem /x, ale wtedy należy wprowadzić spacje jawnie, ponieważ w przeciwnym razie zostaną one zignorowane. Kolejną zaletą jest to, że pozwala wypowiedzieć swój regex (który, jeśli jest długi, może być dobrym pomysłem):

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

hmm, dobra sugestia, ale nie sądzę, że moje definicje kroków byłyby bardziej czytelne – SirLenz0rlot

+1

@ SirLenz0rlot lol jeśli to nie sprawi, że będzie czytelny, to nie masz innych opcji, ponieważ jest to ** Sposób na napisanie sformatowanych/czytelnych wyrażeń regularnych . W przeciwnym razie wystarczy polegać na edytorze i "zawinąć" linie. – HamZa

+0

ok dzięki. mieli nadzieję, że pojawi się czystsze rozwiązanie. – SirLenz0rlot

-2

wiem, że chcesz go w Ruby, ale Mogę dać ci przykład, jak można go zrealizować w Perl. Naprawdę myślę, że możesz użyć tego pomysłu również w Ruby.

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

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

Pomysł polega na zapisaniu Regexa w zmiennej i zapisaniu zmiennej w regex.

+0

to rzeczywiście możliwość wewnątrz ruby. ale w przypadku definicji kroku ogórka nie zwiększyłoby to czytelności – SirLenz0rlot

1

Co z transformacją ciągu do regex? Stracisz podświetlanie składni, ale powiedziałbym, że nie jest tak źle?

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$/ 
Powiązane problemy