簡體   English   中英

替換除最后一個之前的一個以外的所有_

[英]Replace all the _ except one before last one

我有以下網址:

http://distilleryimage3_s3_amazonaws_com/8af11cdcf11e286b022000ae90285_7_jpg

我想將_替換為. 但是,末尾的_7應該保留-它不是點。

因此,基本上它應該看起來像:

http://distilleryimage3.s3.amazonaws.com/8af11cdcf11e286b022000ae90285_7.jpg

如果我使用str_replace,它將替換所有的_但是我需要將其保留在那里。 我怎樣才能做到這一點?

使用它(立即更正!

<?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

您可以使用以下基於負前瞻的正則表達式代碼:

$s='http://distilleryimage3_s3_amazonaws_com/8af11cdcf11e286b022000ae90285_7_jpg';
$repl = preg_replace('/_(?![^_]*_[^_]*$)/', '.', $s);
//=> http://distilleryimage3.s3.amazonaws.com/8af11cdcf11e286b022000ae90285_7.jpg

這是一個不使用正則表達式的解決方案(適用於所有數字,因此,如果數字與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

演示!

字符串本身中的最后一個_。

 _(?=[^_]+$)

編輯:我的假設是,這個問題需要特定的文件擴展名知識才能正確回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM