Question

Je dois extraire des marques marquées par des accolades d'une chaîne donnée.

J'ai essayé d'utiliser Expresso pour construire quelque chose qui va analyser ...

-------------------------------------------------------------
"{Token1}asdasasd{Token2}asd asdacscadase dfb db {Token3}"
-------------------------------------------------------------

et produit & "Token1 &"; & "Token2 &"; & "Token3 &";

J'ai essayé d'utiliser ..

-------------------------------------------------------------
({.+})
-------------------------------------------------------------

... mais cela semblait correspondre à l'expression entière.

Avez-vous des idées?

Était-ce utile?

La solution

Essayez

\{(.*?)\}
The \{ will escape the "{" (which has meaning in a RegEx).
The \} likewise escapes the closing } backet.
The .*? will take minimal data, instead of just .* 
which is "greedy" and takes everything it can.
If you have assurance that your tokens will (or need to) 
be of a specific format, you can replace .* with an appropriate 
character class. For example, in the likely case you 
want only words, you can use (\w*) in place of the (.*?) 
This has the advantage that closing } characters are not 
part of the class being matched in the inner expression, 
so you don't need the ? modifier). 

Autres conseils

Essayez:

\{([^}]*)\}

Ceci bloquera la recherche à l'intérieur des accolades ondulées pour s'arrêter sur l'accolade fermante.

Une autre solution:

(?<=\{)([^\}]+)(?=\})

Ceci utilise un lookahead et un lookbehind afin que les crochets ne soient pas consommés du tout.

Les accolades ont une signification particulière dans les expressions régulières, vous devez donc y échapper. Utilisez \{ et \} pour les comparer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top