我有以下网址:
http://distilleryimage3_s3_amazonaws_com/8af11cdcf11e286b022000ae90285_7_jpg
我想将_
替换为.
。但是,应该保留最后的_7
- 它不是一个点。
所以,基本上应该是这样的:
http://distilleryimage3.s3.amazonaws.com/8af11cdcf11e286b022000ae90285_7.jpg
如果我使用str_replace它将替换所有_
,但我需要保留那个。{1}}我怎么能这样做?
答案 0 :(得分:2)
使用此功能(立即更正!)
<?php
$subject = 'http://distilleryimage3_s3_amazonaws_com/8af11cdcf11e286b022000ae90285_7_jpg';
$pattern = '/(_)(?!\d_jpg)/';
var_dump(preg_replace($pattern, '.', $subject));
此输出
http://distilleryimage3.s3.amazonaws.com/8af11cdcf11e286b022000ae90285_7.jpg
答案 1 :(得分:1)
您可以使用此否定前瞻为基础的正则表达式代码:
$s='http://distilleryimage3_s3_amazonaws_com/8af11cdcf11e286b022000ae90285_7_jpg';
$repl = preg_replace('/_(?![^_]*_[^_]*$)/', '.', $s);
//=> http://distilleryimage3.s3.amazonaws.com/8af11cdcf11e286b022000ae90285_7.jpg
答案 2 :(得分:1)
这是一个不使用正则表达式的解决方案(适用于所有数字,因此如果数字与7
不同,这不会失败;它不必是数字 - 字符串有效,也是):
<?php
$haystack = 'http://distilleryimage3_s3_amazonaws_com/8af11cdcf11e286b022000ae90285_7_jpg';
//replacing all '_' with '.'
$haystack = str_replace('_', '.', $haystack);
//finding second last occurence of '.'
$n = strrpos($haystack, '.', strrpos($haystack, '.') - strlen($haystack) - 1);
//replacing the nth character to '_'
$haystack[$n] = '_';
echo $haystack;
输出:
http://distilleryimage3.s3.amazonaws.com/8af11cdcf11e286b022000ae90285_7.jpg
答案 3 :(得分:0)
字符串中的最后一个_本身不是。
_(?=[^_]+$)
编辑:我的假设是这个问题需要特定的文件扩展知识才能正确回答。