[英]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.