URL: https://linuxfr.org/forums/programmation-ruby/posts/expressions-r%C3%A9guli%C3%A8res Title: Expressions régulières Authors: Kerro Date: 2008年06月11日T21:51:43+02:00 Tags: Score: 0 Bonjour, j'ai un soucis avec des expressions régulières Ruby. Je n'ai jamais réussi à avoir une chaîne vide en cas de non correspondance... uniquement si la chaîne vient d'un fichier (?!) Par exemple je souhaite lire un fichier de configuration structuré comme suis: # commentaire PARAMETRE = VALEUR AUTRE_PARAMETRE = AUTRE_VALEUR ENCORE_UN = 123 # commentaire UNE_RUSE AHAH La dernière ligne contient volontairement une erreur. Il manque le signe '='. Si je veux lire le nom du paramètre (en supprimant les blancs avant et après): chaine = "AUTRE_PARAMETRE = AUTRE_VALEUR" print chaine.sub!(/^\s*(.*)\s*=.*$/, '1円'), "\n" ==> AUTRE_PARAMETRE chaine = "UNE_RUSE AHAH" print chaine.sub!(/^\s*(.*)\s*=.*$/, '1円'), "\n" ==> nil La première ligne affichée est bonne. La seconde affiche 'nil' ce qui est normal puisqu'il manque le signe '=', donc aucune correspondance n'est trouvée. Maintenant je veux le lire "en vrai": IO.readlines("fichier.conf").each do |ligne| £spaces£ £/spaces£ £spaces£ £/spaces£if ligne =~ /^\s*[;#]+|^\s*$/ £spaces£ £/spaces£next # sauter les lignes vides (vides, ou espaces, ou tabulations, ou commentaires) £spaces£ £/spaces£end £spaces£ £/spaces£print ligne.sub(/^\s*(.*)\s*=.*$/, '1円'), "\n" £spaces£ £/spaces£ end ==> PARAMETRE ==> AUTRE_PARAMETRE ==> ENCORE_UN ==> UNE_RUSE AHAH La dernière ligne devrait être 'nil'. Je ne comprends pas pourquoi elle n'est pas 'nil' alors que c'est la même expression que dans le premier test. Je ne sais pas comment faire pour que ça retourne 'nil' ou une chaîne vide si il n'y a pas le signe '='. Quelqu'un a une idée ?

AltStyle によって変換されたページ (->オリジナル) /