Ruby Language Quantificateurs


Exemple

Quantifiers permet de spécifier le nombre de chaînes répétées.

  • Zéro ou un:

    /a?/
    
  • Zéro ou beaucoup:

    /a*/
    
  • Un ou plusieurs:

    /a+/
    
  • Nombre exact:

    /a{2,4}/ # Two, three or four
    /a{2,}/  # Two or more
    /a{,4}/  # Less than four (including zero)
    

Par défaut, les quantificateurs sont gourmands , ce qui signifie qu’ils prennent autant de caractères qu’ils le peuvent tout en effectuant une correspondance. Normalement, cela ne se remarque pas:

/(?<site>.*) Stack Exchange/ =~ 'Motor Vehicle Maintenance & Repair Stack Exchange'

Le site groupe de capture nommé sera défini sur "Maintenance et réparation des véhicules automobiles" comme prévu. Mais si «Stack Exchange» est une partie facultative de la chaîne (car il pourrait s'agir de «Stack Overflow» à la place), la solution naïve ne fonctionnera pas comme prévu:

/(?<site>.*)( Stack Exchange)?/

Cette version correspondra toujours, mais la capture nommée inclura "Stack Exchange" puisque * mange avidement ces caractères. La solution consiste à ajouter un autre point d'interrogation pour rendre le * paresseux:

/(?<site>.*?)( Stack Exchange)?/

Ajout ? à tout quantificateur le rendra paresseux.