Ordre de l’opérateur d’expression régulière (.. | ..… .. | ..)

Quel est l’ordre de priorité des expressions dans l’opérateur (..|. .. .|..) – de gauche à droite, de droite à gauche ou quelque chose d’autre?

De gauche à droite, et la première alternative appariée “gagne”, les autres ne sont pas vérifiées. C’est un comportement typique de regex NFA. Une bonne description de ce comportement est fournie à la page Alternance de regular-expressions.info .

Notez que RegexOptions.RightToLeft uniquement le moteur regex à examiner la chaîne d’entrée de droite à gauche. Le modificateur n’a pas d’incidence sur la façon dont le moteur regex traite le modèle lui-même.

Laissez-moi illustrer bbac : si vous avez une expression rationnelle (aaa|bb|a) et essayez de trouver une correspondance dans bbac utilisant Regex.Match , la valeur que vous obtiendrez est bb car a alternative apparaît après bbb . Si vous utilisez Regex.Matches , vous obtiendrez toutes les correspondances, et bb et a iront dans vos résultats.

En outre, le fait que le motif de regex soit examiné de gauche à droite montre clairement que, dans un groupe alternatif non ancré, l’ordre des alternatives est important . Si vous utilisez une expression rationnelle (a|aa|aaa) pour correspondre à abbccaa , la première alternative correspondra à chaque a de la chaîne (voir la démo de l’ expression rationnelle ). Une fois que vous avez ajouté des limites de mots, vous pouvez placer les alternatives dans n’importe quel ordre (voir une autre démo de regex ).