2010-07-03 6 views
0

Je cherche un Regex pour lire un C# fichier de classe commeRegex pour lire un fichier de classe

MyClass{} 

Le regex retour SHLD « MyClass » lorsqu'il est passé la chaîne « MyClass {} ».

Modifié:

Common 
{ 
    MyClass1 
    { 
    Method1 
    { 
     "Helloworld"; 
     "GoodBye";  
    } 
    Method2 
    { 
     "SayGoodMorning"; 
    } 
    } 
    MyClass2 
    { 
    Method3 
    { 
     "M3"; 
    } 
    } 
} 

En fait, je dois lire une hiérarchie comme ci-dessus, il peut y bn nombre de celui-ci et doivent lire avant et à l'intérieur {}

+0

Etes-vous sûr de vouloir un RegEx aussi simple? Vous pouvez peut-être ajouter plus de détails à la question, comme avec votre description, vous pourriez aussi faire 'if (str ==" MyClass {} ") retourner" MyClass ";' – Oded

+0

Ceci est une expression assez simple (Tim a fourni une bonne solution w/explication), mais je sais que les regexps peuvent être assez intimidants pour les débutants, alors voici une bonne ressource qui vous apprendra tout ce que vous devez savoir pour être compétent dans les expressions rationnelles: http://www.regular-expressions.info/tutorialcnt .html Commencez simplement par le chapitre "Caractères" et lisez-les dans l'ordre. C'est une ressource formidable. –

+0

Oui ce n'est pas si simple à dire par Oded, en fait c'est un fichier C# complet à partir de namespce, des classes dans les espaces de noms, des méthodes etc. et je devrais le faire de manière hiérarchique –

Répondre

1

Si votre moteur regex prend en charge préanalyse , vous pouvez utiliser

\b[^{\s]+(?=\s*\{) 

Cela correspondra ["Common", "MyClass1", "Method1", "Method2", "MyClass2", "Method3"] dans votre exemple.

Explication:

\b: Démarrez le match à une limite de mot.

[^{\s]+: Correspond à un ou plusieurs caractères, à l'exception des accolades ouvrantes ou des espaces.

(?=\s*\{): Affirmez que la correspondance se termine par un caractère suivi d'un espace facultatif (y compris les sauts de ligne) et d'une accolade ouvrante.

La restriction des correspondances à certains niveaux de hiérarchie (dans ce cas, seule la correspondance au second niveau d'imbrication) n'est pas possible avec les expressions régulières en général. C'est peut-être possible dans certains dialectes regex, mais cela étire les limites de ce pour quoi les regex sont conçues - un analyseur serait mieux adapté.