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

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 Comments

if you knpw the comment sectionEndExample, why are you looking for it?
Or do you want to find the last comment between * ?
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.
Ok, but what about the answers below?

Sign in to comment.

 Accepted Answer

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)

More Answers (3)

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 '
str = '/* This is a comment */ int x; /* sectionEndExample */';
pattern='(?<=/\*)[\w\s]+(?=\*/)';
sectionEndIdx1 = regexp(str, pattern,'match');
sectionEndIdx1=sectionEndIdx1{end}

3 Comments

This solution is better than mine if there can be code (EDIT: or anything) after the last comment.
You are right, even a space will make a problem.
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'.

Sign in to comment.

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 Comment

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

Sign in to comment.

Categories

Community Treasure Hunt

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

Start Hunting!