0
preg_replace('/[^.]*$/','png','asdf.jpgea.jpg')
输出是asdf.jpgea.pngpng
,为什么最后有两个png
?preg_replace和美元符号
同时,
preg_replace('/\w$/','png','asdf.jpgea.jpg')
输出asdf.jpgea.jppng
。
*
影响$
的行为方式吗?
preg_replace('/[^.]*$/','png','asdf.jpgea.jpg')
输出是asdf.jpgea.pngpng
,为什么最后有两个png
?preg_replace和美元符号
同时,
preg_replace('/\w$/','png','asdf.jpgea.jpg')
输出asdf.jpgea.jppng
。
*
影响$
的行为方式吗?
的*
(0次或更多次)不影响$
标志的行为,但你需要将其更改为+
(1次以上),以获得您所期望的结果:
preg_replace('/[^.]+$/','png','asdf.jpgea.jpg');
实质上,*
导致jpg
获得匹配两次而不是一次,因为*
也没有匹配任何内容。
这背后的技术解释是相当复杂的,而且我不喜欢打字了这一切,所以这里是一个很好的链接,别人解释它:
这已经被问了很多次。 '*'使它匹配一个空字符串。 '$'是一个零宽度断言,因此第一个匹配是字符串结尾之前的空字符串,第二个匹配是字符串本身的结尾。它不影响所有的正则表达式,但大多数都是。 –