Help using Regexp:

11 visualizaciones (últimos 30 días)
Ajpaezm
Ajpaezm el 23 de Mayo de 2018
Editada: per isakson el 24 de Mayo de 2018
Hello,
I'm a bit confused on how to use regexp to get information that's between braces. For example, I have the following text:
str='Some.Text {a1=v1 a2=v2}';
val=regexp(str, ?, 'match', 'once')
In "?" should be a like a pattern of special characters (lookaheads, lookbehinds, non-greedys, etc) but I don't know how to make it work to just extract everything inside {}.
Can someone help me?
Thanks in advance!

Respuesta aceptada

per isakson
per isakson el 23 de Mayo de 2018
Editada: per isakson el 23 de Mayo de 2018
One way
>> str='Some.Text {a1=v1 a2=v2}';
>> cac = regexp( str, '(?<={)[^}]+(?=})', 'once', 'match' )
cac =
a1=v1 a2=v2
>>
[^}]+ is better than .+ because
  • avoids the problem with "greedies"
  • better performance; easier to evaluate
'(?<=\{)[^}]+(?=\})' it doesn't hurt to escape {} if in doubt whether the are special characters.
  3 comentarios
per isakson
per isakson el 23 de Mayo de 2018
Editada: per isakson el 23 de Mayo de 2018
There are many good resources on the Internet. However, Matlab has it's own regular expression flavor. It's close to a subset of PCRE, (PERL Compatible RE). (Not the latest version of PRCE though.) Thus,
per isakson
per isakson el 23 de Mayo de 2018
Editada: per isakson el 24 de Mayo de 2018
btw:
xpr = [
'(?<={) ' ... % look behind for literal {
'[^}]+ ' ... % one or more of anything, but literal }
'(?=}) ' ... % look ahead for literal }
];
xpr( isspace(xpr) ) = [];
cac = regexp( str, xpr, ... );
I find this way of writing regular expressions good. It makes me think more and experiment less; it helps me avoid falling into an infinite "trial-and-error-loops".
  • "space" is a bit of a problem. I write space as \x20
  • The final look ahead isn't needed, since + is greedy

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Characters and Strings en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2016b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by