Regexp: different behavior for the same type of expressions

I want to capture everything except the tokens:
name, '_' and '.iv2'
name =
A7122
>> filename'
ans =
'A7122_60a.iv2'
'A7122_60b.iv2'
'A7122_70a.iv2'
'A7122_70b.iv2'
'A7122_90a.iv2'
'A7122_90b.iv2'
'A7122_100.iv2'
'A7122_120.iv2'
I do this:
str=regexp(filename, [ '(?:[^' name '_])\w*(?:[^.iv2])' ], 'match');
And the answer is the following!
>> celldisp(str)
str{1}{1} =
60a
str{2}{1} =
60b
str{3}{1} =
0a
str{4}{1} =
0b
str{5}{1} =
90a
str{6}{1} =
90b
str{7}{1} =
00
str{8} =
{}
I don't understand why regexp has a different behavior for i.e. in filename(1) and filename(3)

2 commentaires

Cedric
Cedric le 19 Sep 2013
Modifié(e) : Cedric le 20 Sep 2013
Your mistake is that [^A7122_] doesn't stand for "any six letters expression that is not 'A7122 _'", but instead for "any character which is not in the pool of literals {'A', '7', '1', '2', '_' }". The same applies to [^.iv2]. This is why 70a and 70b for example are not matched, but you get instead 0a and 0b.
Thank you very much Cedric! Very nice explanation!

Connectez-vous pour commenter.

 Réponse acceptée

Vishal Rane
Vishal Rane le 19 Sep 2013
Modifié(e) : Vishal Rane le 19 Sep 2013
You can use:
regexprep( filename, [ name, '_|.iv2'], '')
Also
regexp( filename, [ name, '_(\w*).iv2'], 'tokens')

1 commentaire

Thank you Vishal! Much more compact syntax! However, do you know why regexp has this behavior?

Connectez-vous pour commenter.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 19 Sep 2013
Modifié(e) : Andrei Bobrov le 19 Sep 2013
str = {'A7122_60a.iv2'
'A7122_60b.iv2'
'A7122_70a.iv2'
'A7122_70b.iv2'
'A7122_90a.iv2'
'A7122_90b.iv2'
'A7122_100.iv2'
'A7122_120.iv2'}
cl = regexp(str,'(?<=_)\w*(?=\.)','match');
out = cat(1,cl{:});

2 commentaires

Thank you Andrei! Do you know why is this happening?
Please read about regexp, parts:
- Regular expression :
about
Metacharacters ( \w ),
Quantifiers ( expr* ),
Lookaround Assertions ( expr(?=test) and (?<=test)expr )

Connectez-vous pour commenter.

Catégories

En savoir plus sur Characters and Strings dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by