web-dev-qa-db-fra.com

Fractionner 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 correspondra à des sauts de ligne; au lieu de cela, je veux écrire une longue expression régulière que, pour plus de lisibilité, je voudrais diviser en plusieurs lignes de code.

Quelque chose comme:

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

Peut-on le faire?

71
Chowlett

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

Dans ton cas:

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

L'utilisation de% r avec l'option x est la manière préférée de le faire.

Voir cet exemple dans le github Ruby style guide

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

105
mthorley

vous pouvez utiliser:

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