2010-11-11 6 views
1

J'ai vu \ s ++ mais je ne suis pas sûr de ce que cela signifie. Pourriez-vous s'il vous plaît utiliser un exemple? (\ s signifie espace blanc) s ++ Expression régulière

+1

Comme vous pouvez le voir dans les réponses et les commentaires: Ce serait bien si vous avez fourni le moteur regex particulier de cette question. – musiKk

Répondre

6

\s++ signifie correspondre à un ou plusieurs caractères blancs possessivement.

C'est la même chose que d'écrire (?>\s+). Le bonus supplémentaire le rend possessif, comme un sous-groupe indépendant.

Ceci illustre la différence:

% perl -Mre=debug -le 'print (("a " . " " x 300 . "x") =~ /a\s+\d/ || 0)' | & wc -l 
    621 
% perl -Mre=debug -le 'print (("a " . " " x 300 . "x") =~ /a\s++\d/ || 0)' | & wc -l 
     26 

Je compte combien de pas le moteur regex prend pour résoudre le match. Il n'y a pas de correspondance, mais il ne le sait pas. Il essaie un tas de choses stupides dans le premier cas que le match possessif l'empêche d'essayer dans la seconde. Une fois qu'une correspondance possessive a été faite, elle ne peut pas être reculée et recalculée.

+0

Vous voudrez peut-être ajouter que Java, Perl (versions plus récentes), PCRE (moteur de preg de PHP, entre autres), et le moteur JGSoft prend en charge les quantificateurs possessifs. Tout cela, avec .NET et Ruby, supporte aussi les groupes atomiques '(?> ...)', donc les expressions rationnelles qui les utilisent sont plus portables. –

+0

@Tim: Je me suis dit que depuis qu'il l'a trouvé dans le code en cours de recherche, ce n'était pas une chose de portabilité, c'était juste ne pas savoir ce que cela signifiait dans cette langue. Je ne suis au courant d'aucune autre signification de '++'. – tchrist