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
獲得匹配兩次而不是一次,因爲*
也沒有匹配任何內容。
這背後的技術解釋是相當複雜的,而且我不喜歡打字了這一切,所以這裏是一個很好的鏈接,別人解釋它:
這已經被問了很多次。 '*'使它匹配一個空字符串。 '$'是一個零寬度斷言,因此第一個匹配是字符串結尾之前的空字符串,第二個匹配是字符串本身的結尾。它不影響所有的正則表達式,但大多數都是。 –