A question on regexprep

4 views (last 30 days)
Edward Huang
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?
Thank you in advance.

Accepted Answer

TADA
TADA on 19 Aug 2019
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.'
  1 Comment
Edward Huang
Edward Huang on 19 Aug 2019
Oops... I didn't realize I could have checked with regexp... Thanks!

Sign in to comment.

More Answers (0)

Categories

Find more on Characters and Strings in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!