【问题标题】:preg_replace and dollar sign [duplicate]preg_replace 和美元符号[重复]
【发布时间】:2018-03-22 14:16:05
【问题描述】:
preg_replace('/[^.]*$/','png','asdf.jpgea.jpg')

输出是asdf.jpgea.pngpng,为什么最后有两个png

同时,

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

输出asdf.jpgea.jppng

* 是否会影响 $ 的行为方式?

【问题讨论】:

  • 这个问题已经被问过很多次了。 * 使其匹配空字符串。 $ 是零宽度断言,因此第一个匹配是字符串结尾之前的空字符串,第二个匹配是字符串本身的结尾。它不会影响所有的正则表达式风格,但会影响其中的大多数。

标签: php regex dollar-sign


【解决方案1】:

*(0 次或多次)不会影响 $ 符号的行为,但您需要将其更改为 +(1 次或多次)才能获得您期望的结果:

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

基本上,* 导致 jpg 匹配两次而不是一次,因为 * 也没有匹配任何内容。

这背后的技术解释相当复杂,我不想全部写出来,所以这里有一个很好的链接,其他人解释它:

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

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多