用正则表达式替换部分字符串

时间:2017-07-12 00:10:40

标签: php regex

我有一个这样的字符串:

$string ='//upload.wikimedia.org/wikipedia/commons/thumb/6/6b/AkutanZero1.jpg/220px-AkutanZero1.jpg';

但是我试图用另一部分取代它的一部分:

$string ='//upload.wikimedia.org/wikipedia/commons/thumb/6/6b/AkutanZero1.jpg/123px-AkutanZero1.jpg';

我正在尝试使用preg_replace,我知道该字符串将始终以/ thumb /(十六进制值)/(两个十六进制值)/(stuff)/(一个或多个数字)-px-结尾(东西)

不幸的是,我没有成功地取代文本,也不知道我做错了什么。

如果我可以假设/(一个或多个数字)-px只存在一次但它也可能存在于/(stuff)部分中,这将很容易。

preg_replace('/\/thumb\/[0-9a-f]\/[0-9a-f]{2}\/.+\/([0-9]+)-px-.+$/i', '328', $string);
preg_replace('/(\/thumb\/[0-9a-f]\/[0-9a-f]{2}\/.+\/)([0-9]+)(-px-.+)$/i', $1.'328'.$3, $string);

1 个答案:

答案 0 :(得分:0)

根据您的单个样本输入,您不需要任何捕获组来获得预期结果。只需找到数字后跟px-的数字,然后交换您的首选值。如果这还不够强大,请改进您的问题。

代码:(Demo

$string='//upload.wikimedia.org/wikipedia/commons/thumb/6/6b/AkutanZero1.jpg/220px-AkutanZero1.jpg';
echo preg_replace('/\d+px-/','123px-',$string);

输出:

//upload.wikimedia.org/wikipedia/commons/thumb/6/6b/AkutanZero1.jpg/123px-AkutanZero1.jpg