2010-10-19 3 views
0

J'ai une chaîne que je veux analyser en utilisant regex. Il a le format de suivi:C# Récupération de la première instance de modèle ambigu

« texte aléatoire [identifiant] plus de texte [identifiant] autres choses »

Je voudrais trouver le modèle qui correspondra à [identifiant] les crochets inclus. Dois-je faire quelque chose de spécial pour retourner deux matchs au lieu d'un match. Je crains que je ne reviendrai ce match:

"[id value] more text [id value]" 

en utilisant un modèle comme celui-ci: \[((.|\n)*?)\]

Je ne suis pas très bon à regex, donc cela peut sembler super trival. Est-ce que l'analyseur d'expressions rationnelles se déplace de gauche à droite à travers la chaîne? J'ai ensuite une question complémentaire qui est un peu plus compliquée. Et si j'ai des motifs imbriqués:

"random text [id [id value]] more text [id value] other stuff" 

Je voudrais être en mesure de capturer [id [id value]] comme un match et [id value] comme un match. Est-il possible d'écrire une regex qui renverra à la fois [id [id value]] et [id value]. Dans cette situation, je voudrais vérifier les crochets équilibrés et puis se terminer sur le dernier match, est-ce possible en utilisant regex?

+0

pas une réponse directe à votre question, mais téléchargez Expresso: http://www.ultrapico.com/Expresso.htm Idéal pour travailler avec et apprendre les –

Répondre

1

Les parenthèses correspondantes sont l'exemple canonique d'une tâche simple qui ne peut pas être effectuée en utilisant des automates finis - et les expressions régulières sont simplement un langage pour décrire des automates finis. Les parenthèses correspondantes nécessitent une grammaire sans contexte.

Bien sûr, les bibliothèques regex modernes ont des capacités qui vont bien au-delà des expressions régulières de base. Donc, vous pourriez être capable de gérer quelque chose. Cependant, je n'avais pas beaucoup de chance. Vous seriez probablement capable de lancer un simple analyseur récursif-descendant en moins de temps qu'il vous faudrait pour trouver comment torturer une regex en quelque chose qui fonctionnerait le plus souvent.

+0

de regex Donc j'ai fondamentalement besoin d'écrire un analyseur qui peut analyser chaque niveau imbriqué dans un cas de base que regex peut gérer. Je pense que je peux gérer cela. – Shawn

Questions connexes