2010-10-04 4 views
0

J'ai deux groupes de texte:Regex: Comment capturer un groupe parmi plusieurs groupes en utilisant regex? (En rubis)

firstgroup 
(some content) 
endgroup 


secondgroup 
(some content) 
endgroup 

Je suis en train de capturer tout le premier groupe (et non le deuxième groupe). J'utilise cette expression régulière:

firstgroup(.|\n)*endgroup 

Pour une raison quelconque, que les expressions régulières sélectionne à la fois premier groupe et le deuxième groupe (probablement parce qu'il regarde le dernier « endgroup » ci-dessus). Existe-t-il un moyen de modifier mon expression régulière de sorte que je sélectionne seulement le premier groupe (et pas le deuxième groupe)?

Répondre

1

Vous avez besoin d'un quantificateur paresseux

/firstgroup\n(.*?)\nendgroup/m 

pour mettre fin au groupe le plus tôt possible. Voir http://www.rubular.com/r/D6UkOnMYLj.

(Et vous pouvez utiliser le drapeau /m pour rendre les nouvelles lignes . correspondent.)

+0

Great! Merci Kenny :) C'était rapide! Merci beaucoup. – sjsc

1
string=<<EOF 
firstgroup 
(some content) 
endgroup 


secondgroup 
(some content) 
endgroup 
EOF 

puts string.split(/endgroup/)[0] + "endgroup"