TCL: Quelqu'un peut-il expliquer ?: Expression régulière
Je reçois la confusion entre? et ?:. P>
? signifie que le caractère précédent peut ou peut ne pas être présent. p>
alors je ne comprends pas quoi (? :) Indique. P>
Quelqu'un peut-il expliquer cela. P>
([0-9]+(?:\.[0-9]*)?)
3 Réponses :
?: code> ne crée pas simplement un groupe de capture. Par exemple
A (?: B) CODE> correspondra à "AB" dans "ABC" P>
Comme mentionné dans le page manuelle RE_SYNTAX à partir de La documentation TCL, le ?: code> dans un groupe entre parenthèses éteint la capture de ce groupe. En d'autres termes, l'expression
(\ d) (\ d) code> correspondrait à 2 chiffres et faire que chacun soit disponible dans un groupe de matchs séparé. L'expression
(\ d) (?: \ D) code> est similaire mais ne fournit pas les correspondances dans des groupes de matchs distincts. Spécifiquement pour TCL:
regexp {(\d)(\d)} $data -> first second
Ceci (? :) Syntaxe est seulement pour TCL ou peut être n'importe quelle langue qui utilise une expression régulière?
Il (? :) Peut être utilisé dans d'autres langues aussi. !!!
@ user2742564 Ce n'est pas universel, mais il est extrêmement courant parmi les moteurs avancés.
Supposons que vous essayiez de rechercher quelque chose comme la regex ci-dessus correspondrait au maintenant, il peut ne pas avoir pour but de capturer la partie décimale toujours et Il a déjà été capturé dans notre groupe 2 aussi. Alors, comment allez-vous faire ce groupe maintenant, vous obtenez uniquement les deux groupes souhaités p> Avis, j'ai également changé la dernière partie de la regex de abc123 code> ou
abc123.45 code> dans votre chaîne d'entrée et que vous vouliez capturer les lettres et les chiffres séparément. Vous utiliseriez une regex (un peu similaire à la vôtre) comme
ABC123.45 CODE> et fournit trois groupes, ce qui représente des sous-pièces de l'ensemble du match et sont décidés par où vous mettez ces
() code>. Donc, compte tenu de notre regex (sans utiliser
?: code>) nous avons obtenu p>
() code> non capturant? Oui, en utilisant
?: Code> au début comme p>
\. [0-9] * code> à
\. [0-9] + code>. Cela empêcherait une correspondance sur
123. code> c'est-à-dire des chiffres sans une partie décimale mais ayant toujours un point. P> p>
? Code> a beaucoup d'utilisations spéciales dans des expressions régulières, sa signification dépend de ce qui est à gauche de celui-ci. Ces significations ne sont souvent pas liées les unes aux autres.
Eh bien,
(? Code> a beaucoup de significations en fonction des 1-2 prochains caractères.
@chx: Quels sont les personnages possibles pour changer le sens d'au ... dans (? :)
Je ne pense pas que je puisse éventuellement les énumérer, regardez régulier-expressions.info/refADV .html pour une tonne de possibilités: modificateurs de sous-expressions, lookaheads, conditionnels, puis sous-programmes comme Stackoverflow.com/questions/4941259/... décrit ici.