正規表現にパターンを付けて、すべてを強制的に読み取らせたい。
http://example.com/w/2/1/x/some-12345_x.png
これを使った「some-12345_x」をターゲットにしたいのですが/\/(.*).png/
、なんらかの理由で動作しません
/で始まり、.pngで終わる必要があることを強制的に記憶させるにはどうすればよいですか?
できるよ:
^.*/(.*)\.png$
/
これは、最後から最後までの出来事をキャプチャし.png
ます。
拡張子を除いた最終的なファイル名を常に取得したい場合はsubstr()
、正規表現を考え出す代わりにPHPを使用できます。
$lastSlash = strrpos($url, '/') + 1;
$name = substr($url, $lastSlash, strrpos($url, '.') - $lastSlash);
また、より読みやすい方法は、PHPのbasename()
:を使用することです。
$filename = basename($url);
$name = substr($filename, 0, strpos($filename, '.'));
実際に正規表現を使用するには、次のパターンを使用できます。
.*/([^.]+).png$
これをPHPで使用するにはpreg_match()
:
preg_match('|.*/([^.]+).png$|', $url, $matches);
$name = $matches[1];
特定の理由でこの状況で正規表現を使用する必要があるかもしれませんが、使用しない場合の代替手段は次のとおりです。
$url = "http://example.com/w/2/1/x/some-12345_x.png";
$value = pathinfo($url);
echo $value['filename'];
出力:
some-12345_x
マニュアルからのpathinfo()
どうですか:
~([^/]+)\.png$~
これは、文字列の最後/
まで一致します。.png