如题
现在有一字符串是
$content = '

test
';
想要将这字符里面的 images/tmp 都替换成 images/pub
本人已经写了一个函数
1 | public static function replace_img_publish_path( $content ){ $pattern = '/(<[img|IMG].+src=\"?.+)(images\/tmp\/)(.+\.(jpg|gif|bmp|bnp|png)\"?.+>)/' ; $replacement ="\${1}images/pub/\${3}"; print preg_replace( $pattern , $replacement , $content ); exit ; }
|
ログイン後にコピー
输出结果为

test
只替换了最后一个img标签
如何才能全部都替换?
回复讨论(解决方案)
1 | $content = '<p><img src="http://localhost:8080/story/images/tmp/1403530150545.jpg" style="width: 268px;"><img src="http://localhost:8080/story/images/tmp/1403530147265.jpg" style="width: 268px;">test</p>' ; $content = preg_replace( '#(?<=src="http://localhost:8080/story/images/)tmp/#' , 'pub/' , $content ); echo $content ;
|
ログイン後にコピー

test
你没有防止贪婪匹配。
$pattern='/(<[img|IMG].+?src=\"?.+?)(images\/tmp\/)(.+?\.(jpg|gif|bmp|bnp|png)\"?.+?>)/';
你写的方法加一个参数U就可以了。
加上U,将懒惰匹配 变成 贪婪匹配。
$pattern='/(<[img|IMG].+src=\"?.+)(images\/tmp\/)(.+\.(jpg|gif|bmp|bnp|png)\"?.+>)/ U';
测试例子:
1 | $content = '<p><img src="http://localhost:8080/story/images/tmp/1403530150545.jpg" style="width: 268px;"><img src="http://localhost:8080/story/images/tmp/1403530147265.jpg" style="width: 268px;">test</p>' ;replace_img_publish_path( $content ); function replace_img_publish_path( $content ){ $pattern = '/(<[img|IMG].+src=\"?.+)(images\/tmp\/)(.+\.(jpg|gif|bmp|bnp|png)\"?.+>)/U' ; $replacement ="\${1}images/pub/\${3}"; print preg_replace( $pattern , $replacement , $content ); exit ;}
|
ログイン後にコピー
替换后:

test