89 votes

Split Ruby regex sur plusieurs lignes

Ce n'est peut-être pas tout à fait la question à laquelle vous vous attendez! Je ne veux pas d'une expression régulière qui corresponde aux sauts de ligne; au lieu de cela, je veux écrire une longue expression régulière que, pour plus de lisibilité, j'aimerais diviser en plusieurs lignes de code.

Quelque chose comme:

 "bar" =~ /(foo|
           bar)/  # Doesn't work!
# => nil. Would like => 0

Cela peut-il être fait?

138voto

mthorley Points 693

L'utilisation de% r avec l'option x est la meilleure façon de procéder.

Voir cet exemple du guide de style github ruby

 regexp = %r{
  start         # some text
  \s            # white space char
  (group)       # first group
  (?:alt1|alt2) # some alternation
  end
}x

regexp.match? "start groupalt2end"

https://github.com/github/rubocop-github/blob/master/STYLEGUIDE.md#regular-expressions

54voto

SilentGhost Points 79627

Vous devez utiliser le /x , qui active le mode d'espacement libre .

Dans ton cas:

 "bar" =~ /(foo|
           bar)/x

3voto

Michel Points 345

vous pouvez utiliser:

 "bar" =~ /(?x)foo|
         bar/

1voto

Kache Points 2182

Plutôt que de couper l'expression moyenne de l'expression régulière, je suggère de la diviser en plusieurs parties:

 full_rgx = /This is a message\. A phone number: \d{10}\. A timestamp: \d*?/

msg = /This is a message\./
phone = /A phone number: \d{10}\./
tstamp = /A timestamp: \d*?/

/#{msg} #{phone} #{tstamp}/

Je fais la même chose pour les longues cordes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X