preg_replace('/[^.]*$/','png','asdf.jpgea.jpg')
The output is asdf.jpgea.pngpng
, why there are two png
in the end?
Meanwhile,
preg_replace('/\w$/','png','asdf.jpgea.jpg')
outputs asdf.jpgea.jppng
.
Is the *
affecting how $
behaves?
The *
(0 or more times) isn't affecting how the $
sign behaves, but you need to change it to a +
(1 or more times) to get the result you expect:
preg_replace('/[^.]+$/','png','asdf.jpgea.jpg');
Essentially, the *
is resulting in jpg
getting matched twice instead of once, because *
also matches nothing.
The technical explanation behind this is pretty complex, and I don't feel like typing it all out, so here's a good link where someone else explains it: