2013-08-06 4 views
1

Je sais que j'ai vraiment besoin de lire un de ces livres (1, 2) pour apprendre des expressions régulières mais en attendant j'ai une petite question pour les personnes qui ont déjà les connaissances. Je veux écrire un extrait de texte sublime qui laisse les espaces intérieurs pour les parenthèses si je commence à taper mais supprime tout à l'intérieur des parenthèses si je supprime la sélection.Expressions régulières utilisant des conditions

Déclenchée:

(${1:anything could be typed here}) 

TYPED:

(I_wrote_that) 

supprimé:

() 

Je ne demande pas à quelqu'un d'écrire pour moi, mais une explication claire sur régulière conditionnelle les expressions seraient très appréciées. Merci!

NB: Je fais référence à la syntaxe conditionnelle dans les expressions régulières. NB2: Voici un exemple avec un printf C/C++.

Snippet:

printf("${1:%s}\\n" ${1/([^%]|%%)*(%.)?.*/(?2:,:\);)/} $2 ${1/([^%]|%%)*(%.)?.*/(?2:\);))/} 

donne:

printf("%s\n" , ); 

Ou:

printf("\n"); 
+0

"expressions rationnelles conditionnelles", faites-vous référence à la syntaxe conditionnelle dans certaines expressions regex '(? (Condition) oui-pattern | no-pattern)', ou parlez-vous de quelque chose de spécifique dans le texte sublime? – Qtax

+0

Je fais référence à la syntaxe conditionnelle dans les expressions régulières. – Athanase

+0

Quelle est l'entrée, la condition et la sortie attendue. Ce n'est pas clair pour moi. – HamZa

Répondre

1

Comme Qtax already showed vous pouvez utiliser dans conditionals regexp de telle manière:

(?(condition)then|else)

ou

(?(?=pattern)then|else)

Les expressions régulières sont moyen de trouver des modèles et des similitudes dans l'entrée, mais pas une logique (sinon je suppose, il serait logique des expressions aussi). Si votre programme désire mettre de la logique dans la clause regexp, c'est peut-être la première cloche d'un défaut de conception.

MISE À JOUR +

De plus, je ne comprends pas

Tout pourrait être dactylographiées à l'intérieur des parenthèses. Mais si le contenu est supprimé, nous supprimons également le remplissage interne. -

qu'Athanase

Parlez-vous regexp dynamique? Il semble que vous ayez besoin d'une expression rationnelle ou d'une ligne de commande basée sur les événements, qui analysera votre expression rationnelle pendant que vous tapez.

Également possible, vous parlez des fonctionnalités Sublime Text, mais pas à propos de pure regexp (qui pourrait également avoir des écarts dépendent de l'implémentation).

+0

Cela est vrai, voici un exemple de texte sublime pour un printf en C/C++: 'printf (" $ {1:% s} \\ n "$ {1/([^%] | %%) * (% .)?. */(? 2:,: \);) /} $ 2 $ {1/([^%] | %%) * (%.)?. */(? 2: \);)) /} ', sachant que $ {1:% s} place la sélection sur'% s' lorsque l'extrait est déclenché. – Athanase