MATLAB Answers

A question on regexprep

1 view (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.

  0 Comments

Sign in to comment.

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)

Community Treasure Hunt

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

Start Hunting!

Translated by