php-文字列の最後の出現を見つけてそれを置き換える
phpに文字列として次のリンクがあります:
$url = 'http://www.example.com/assets/images/temp/10.jpg';
数字の前にBIGという単語を追加しようとしているので、最後に次のようになります。
$url = 'http://www.example.com/assets/images/temp/big10.jpg';
現在、 /
でexplodeを使用し、最後の配列にbigを追加することでこれを実現しています。私の唯一の問題は、将来、このリンクの /
が少なくなる可能性があることです。つまり、 http:/ {-code-3 }www.example.com{-コード-3}アセット{-コード-3}10.jpg<{-コード-3}コード>。この場合、私のexplodeステートメントは機能しません。
/
が最後に出現した後にbigという単語を追加するより良い方法はありますか?
私もこの方法を思いついた:
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$ filename = substr(strrchr($ url、 "/")、1); //は10.jpgを返します
$ newfilename ='big'.substr(strrchr($ url、 "/")、1); //はbig10.jpgを返します
$ newurl = str_replace($ filename、$ newfilename、$ url); //は10.jpgをbig.jpgに置き換えます
答え :
解決策:
解決策として上記の質問に記載されている説明によると、次のコードスニペットを実行してみてください。
<?php
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$fileName = basename($url);
$newFileName = 'big' . $fileName;
$url = str_ireplace($fileName, $newFileName, $url);
echo $url;
?>
答え :
解決策:
Explode
は常に機能します。ただし、より適切な方法が必要な場合は、次のようにすることができます。
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$newurl = substr_replace($url, "big", strrpos($url, '/') + 1, 0);
これにより、期待される結果が得られます: http://www.example.com/assets/images/temp/big10.jpg
答え :
解決策:
目的を達成するための方法はたくさんあります。
私にとって最も簡単なのは、 pathinfo
を使用してファイル名を抽出し、プレフィックスを{-code-に追加することです。 2}
。
$ prefix ='big';
$ url ='http://www.example.com/assets/images/temp/10.jpg';
$ pathinfo = pathinfo($ url);
var_dump($pathinfo['dirname']。'/'。$prefix。$pathinfo['basename']);
string(51) "http://www.example.com/assets/images/temp/big10.jpg"
オブジェクト指向アプローチ: https://3v4l.org/aF5lf
class FileNamePrefixer extends SplFileInfo
{
public function addPrefix($prefix)
{
return $this->getPathInfo() . '/' . $prefix . $this->getBaseName();
}
}
$url = 'http://www.example.com/assets/images/temp/10.jpg';
$fileInfo = new FileNamePrefixer($url);
var_dump($fileInfo->addPrefix('big'));
もう1つの方法は、 preg_replace
を使用して、置換する単語のパターンを指定することです。
$ prefix ='big';
$ url ='http://www.example.com/assets/images/temp/10.jpg';
$ new_url = preg_replace('/ ([\w|\s|-]+)(\.\w+)$ /'、$prefix。'$1 $2'、$ url);
var_dump($ new_url);
パターン([\w|\s|-]+)(\.\w+)$
は;を意味します。文字列の最後で、単語(文字:a-z、A-Z、0-9、_、スペース、-)を探し、その後にピリオドを続け、その後に別の単語を続けて保存しますそれらは変数$1
および$2
にあります。
string(51) "http://www.example.com/assets/images/temp/big10.jpg"
URLにオプションでフラグメントまたはクエリ文字列が含まれている場合、上記の preg_replace
パターンは機能しないことに注意してください。代わりに、次のようにオプションとしてそれらを説明する必要があります:
$ prefix ='big';
$ url ='http://www.example.com/assets/images/temp/10.jpg?foo=bar&baz=foo#foobar';
$ new_url = preg_replace('/([\ w | \ s |-] +)(\。\ w +)(\?.+)?(#.+)? $ /'、$prefix。'$1 $2 $3 $4'、$ url);
var_dump($ new_url);
パターン(\?.+)?(#.+)?
は;を意味します。オプションで検索しますか?後に何かを続け、オプションで#の後に何かを見つけて、元のパターンで変数 $3
と$4
に格納します。
string(74) "http://www.example.com/assets/images/temp/big10.jpg?foo=bar&baz=foo#foobar"
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。