How do I find the last occurrence of a match using regexp in MATLAB?

77 visualizzazioni (ultimi 30 giorni)
If I have the following string in MATLAB:
str = '/* This is a comment */ int x; /* sectionEndExample */';
How do I find the last comment that contains sectionEndExample? I have tried the following:
expr = ['^.*/\*.*sectionEndExample.*\*/'];
sectionEndIdx1 = regexp(str, expr);
But this always returns the sectionEndIdx1 as 1. I am looking in the documentation and have so far played around with the lookAround options. However, I can't figure out a way to do it in MATLAB :(
  3 Commenti
Swati Tiwari
Swati Tiwari il 16 Ago 2013
I apologize for not framing the question correctly. I want to be able to find the last comment in the line. I believe I could get this by tweaking the regular expression. But, my efforts have been in vain.

Accedi per commentare.

Risposta accettata

Azzi Abdelmalek
Azzi Abdelmalek il 16 Ago 2013
str = '/* This is a comment */ int x; /* sectionEndExample */';
pattern='(/)\*[\w\s]+\*(/)';
[sectionEndIdx1,debut,fin] = regexp(str, pattern,'match','start','end');
sectionEndIdx1=sectionEndIdx1{end}
start_comment=debut(end)
end_comment=fin(end)

Più risposte (3)

Cedric
Cedric il 15 Ago 2013
Modificato: Cedric il 15 Ago 2013
Is it what you want? If so, we can work a bit to improve it (in particular for allowing stars in the comment if relevant, which are not allowed with this pattern).
>> regexp(str, '[^\*]+(?=\*/$)', 'match')
ans =
' sectionEndExample '

Azzi Abdelmalek
Azzi Abdelmalek il 15 Ago 2013
str = '/* This is a comment */ int x; /* sectionEndExample */';
pattern='(?<=/\*)[\w\s]+(?=\*/)';
sectionEndIdx1 = regexp(str, pattern,'match');
sectionEndIdx1=sectionEndIdx1{end}
  3 Commenti
Swati Tiwari
Swati Tiwari il 16 Ago 2013
Thank you very much for all your help. Really appreciate it. To rephrase the question, I wish to get the start position and the end position of the comment (including the starting '/*' and the ending '*/' that contains the string 'sectionEndExample'.

Accedi per commentare.


Swati Tiwari
Swati Tiwari il 16 Ago 2013
Thank you all. I also figured out a way to do it!
str = '/* This is a sectionEndExample comment */ int x; /* sectionEndExample */';
pattern='/\*[^\*]*sectionEndExample[^\*]*\*/';
sectionEndIdx1 = regexp(str, pattern,'match')
This will find all the comments with the string sectionEndExample.
  1 Commento
Swati Tiwari
Swati Tiwari il 16 Ago 2013
Modificato: Azzi Abdelmalek il 16 Ago 2013
Here, I divided the string into three parts:
1. (anything but a *)* sectionEndExample (anything but a *)*
2. The start comment identifier /*
3. The end comment identifier

Accedi per commentare.

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by