2010-02-18 2 views
1

Je occurence ai une chaîne comme ceci:Regex: Matching jusqu'à la première, ne durera pas

BEGIN 
blabla.. 
END; 

BEGIN 
one two  
END; 

Et je veux faire regex qui trouvera cette parties séparément. J'ai fait regex (?i)BEGIN[\s\S]*(?i)END; Mais il trouve cette chaîne comme une instance correspondant. Mais j'ai besoin de deux. Comment faire la recherche END; pour la première occurrence, pas la dernière?

merci!

Répondre

4
(?i)BEGIN[\s\S]*?(?i)END; 

il est appelé quantificateur paresseux.

+0

génial! merci pour la réponse rapide –

2

Vous avez besoin d'un non-gourmand *:

(?i)BEGIN[\s\S]*?(?i)END; 

Notez que regex ne peut pas traiter avec des paires imbriquées BEGIN/END. Mieux vaut utiliser un analyseur.

+0

en fait je l'ai fait pour l'analyse PL/SQL et j'espère qu'il ne supporte pas l'imbrication :) –

Questions connexes