我想更改特定字符。但順序并不準確,不僅是第一個。以下是變數示例:
- 123_456_789.jpg
- 3210_5325_aa.jpg
- 54321-0888_555_1111.jpg
有 1000 個這樣的變數。我只想更改所有第二個“_”字符。結果必須是這樣的:
- 123_456 x 789.jpg
- 3210_5325 x aa.jpg
- 54321-0888_555 x 1111.jpg
我試過了substr,str_replace但我不明白該怎么做。
有人可以告訴我一種方法來實作這一點:)
uj5u.com熱心網友回復:
如果第二個總是最后一個,則可以使用strrpos.
<?php
$vals = [
'123_456_789.jpg',
'3210_5325_aa.jpg',
'54321-0888_555_1111.jpg'
];
foreach ($vals as $val) {
$pos = strrpos($val, '_');
echo substr($val, 0, $pos) . 'x' . substr($val, $pos 1) . '<BR>';
}
// 123_456x789.jpg
// 3210_5325xaa.jpg
// 54321-0888_555x1111.jpg
如果它真的應該是第二次出現(獨立于實際出現次數),它可能是:
<?php
$vals = [
'123_456_789.jpg',
'3210_5325_aa.jpg',
'54321-0888_555_1111_32.jpg'
];
foreach ($vals as $val) {
$pos = strpos($val, '_'); // 1st '_'
$pos2 = strpos($val, '_', $pos 1); // 2nd '_'
echo substr($val, 0, $pos2) . 'x' . substr($val, $pos2 1) . '<BR>';
}
// 123_456x789.jpg
// 3210_5325xaa.jpg
// 54321-0888_555x1111_32.jpg
當然,第二種變體是正則運算式。strpos/strrpos由于這個問題,我已經向您展示了變體。
uj5u.com熱心網友回復:
您可以使用嵌套搜索/替換操作:
$f=[
'123_456_789.jpg',
'3210_5325_aa.jpg',
'54321-0888_555_1111.jpg',
'____.___'
];
foreach($f as $s) {
$s[strpos($s,"_") 1 strpos(substr($s,strpos($s,"_") 1),"_")]="x";
echo $s.PHP_EOL;
}
輸出:
123_456x789.jpg 3210_5325xaa.jpg 54321-0888_555x1111.jpg _X__。___
首先,找到第一個下劃線的位置:
strpos($s,"_")
從下一個字符中取出字串的子串
substr($s,strpos($s,"_") 1)
并找到下一個下劃線的位置
strpos(substr($s,strpos($s,"_") 1),"_")
添加其他值,并使用[]符號編輯字串。
操場!
uj5u.com熱心網友回復:
一種選擇是使用模式僅匹配第二個下劃線并將匹配替換為 x
^[^\s_] _[^\s_] \K_
^字串的開始[^\s_] _[^\s_]匹配第一個_和后面的可選字符,而不是_\K_忘記到目前為止\K匹配的_內容,然后匹配哪個
正則運算式演示
或者更具體的模式并斷言以 .jpg
^[^\s_] _[^\s_] \K_(?=\S*\.jpg$)
正則運算式演示
$re = '/^[^\s_] _[^\s_] \K_/m';
$str = '123_456_789.jpg
3210_5325_aa.jpg
54321-0888_555_1111.jpg';
echo preg_replace($re, 'x', $str);
輸出
123_456x789.jpg
3210_5325xaa.jpg
54321-0888_555x1111.jpg
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/370967.html
下一篇:在回圈中添加到具有相同值的陣列
