2010-03-15 4 views
3

Je suis un peu nouveau à cette chose Regex.But de (. +?) Dans les expressions régulières

Lors de l'analyse du code, je viens souvent à travers le modèle .+? ou (.+?)

Je ne peux pas sembler trouver le sens de ce modèle en utilisant mon noobish raisonnement déductif.

+0

http://www.regular-expressions.info/repeat.html explique assez bien – user187291

Répondre

13

. signifie tout caractère (sauf une nouvelle ligne). + signifie un ou plusieurs. ? dans ce contexte signifie paresseux ou non gourmand. Cela signifie qu'il va essayer de faire correspondre le minimum absolu de caractères qui satisfont le quantificateur. Exemple:

> 'abc'.match(/.+/) 
["abc"] 
> 'abc'.match(/.+?/) 
["a"] 
> 'abc'.match(/.*/) 
["abc"] 
> 'abc'.match(/.*?/) 
[""] 
5

Cela dépend du type de connaissances que vous possédez sur les modèles. Voici une explication qui suppose que vous avez une sorte d'idée de base sur les expressions régulières sont:

  • . correspond à tout caractère
  • + moyens répéter le dernier motif 1 fois ou plus
  • jusqu'à présent, .+ signifie un ou plusieurs caractères
  • ? signifie ungreedy, ce qui signifie que la correspondance s'arrêtera à la première occasion.

Une explication rapide sur greediness:

/.+X/.exec("aaaXaaaXaaa"); 
["aaaXaaaX"] 
/.+?X/.exec("aaaXaaaXaaa"); 
["aaaX"] 

Comme vous pouvez le voir, le caractère ? fait la ungreedy de recherche, correspondant ainsi aussi peu que possible.