2017-10-11 154 views
0
preg_replace('/[^.]*$/','png','asdf.jpgea.jpg') 

輸出是asdf.jpgea.pngpng,爲什麼最後有兩個pngpreg_replace和美元符號

同時,

preg_replace('/\w$/','png','asdf.jpgea.jpg') 

輸出asdf.jpgea.jppng

*影響$的行爲方式嗎?

+1

這已經被問了很多次。 '*'使它匹配一個空字符串。 '$'是一個零寬度斷言,因此第一個匹配是字符串結尾之前的空字符串,第二個匹配是字符串本身的結尾。它不影響所有的正則表達式,但大多數都是。 –

回答

0

*(0次或更多次)不影響$標誌的行爲,但你需要將其更改爲+(1次以上),以獲得您所期望的結果:

preg_replace('/[^.]+$/','png','asdf.jpgea.jpg'); 

實質上,*導致jpg獲得匹配兩次而不是一次,因爲*也沒有匹配任何內容。

這背後的技術解釋是相當複雜的,而且我不喜歡打字了這一切,所以這裏是一個很好的鏈接,別人解釋它:

https://stackoverflow.com/a/3420778/8001997