# A question on regexprep

1 view (last 30 days)
Edward Huang on 19 Aug 2019
Commented: Edward Huang on 19 Aug 2019
This is a question stem from a Cody Problem when I looked through those efficient solutions. Let's say I have the following code:
s = 'John got an A in math.';
regexprep(s,'\<(\w)(\w*)(\w)\>','\$1\${\$2(end:-1:1)}\$3');
If I try to replace each match with only one of its tokens:
regexprep(s,'\<(\w)(\w*)(\w)\>','\$1'); % or '\$2','\$3'
I will find that 'A' can be recognized as any one of them, and yet when it is replaced by '\$1\${\$2(end:-1:1)}\$3', only one copy of 'A' is returned. Why?

A is not a match for your regexp,
match = regexp(s,'\<(\w)(\w*)(\w)\>', 'match')
match =
1×5 cell array
{'John'} {'got'} {'an'} {'in'} {'math'}
so it's not replaced by anything,
1. 'John' was replaced by 'ho'
2. 'got' was replaced by 'o'
3. 'an' was replaced by ''
4. A is not a match, not replaced
5. 'in' was replaced by ''
6. 'math' was replaced by 'ta'
s2 = regexprep(s,'\<(\w)(\w*)(\w)\>','\${\$2(end:-1:1)}')
s2 =
'ho o A ta.'
Edward Huang on 19 Aug 2019
Oops... I didn't realize I could have checked with regexp... Thanks!