私はこのような文字列を持っています
image/jpeg; name="3.jpg"
3.jpg
PHPの正規表現で抜き出したい。私は使っている
$test='image/jpeg; name="3.jpg"';
preg_match('/^.*image\/(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG).*(name=(.+))?$/',$test, $matches);
しかし、それは名前を引き出していません。どこが間違っているのか教えてください
あなたの問題はこれです:
.*(name=(.+))?$
まず、.*
文字列の最後まですべてに一致します。
では、(name=(.+))?
何にもマッチできませんが、任意なのでOKです。したがって、一致は成功しましたが、何もキャプチャされていません。
/^.*image\/(?:GIF|PNG|JPG|JPEG).*?(?:name=(.+))?$/i
この場合、.*?
一致する文字をできるだけ少なくすることが役立ちます。image
(また、 andで大文字と小文字を区別しない限り、修飾子name
を使用して正規表現を短縮できます。)/i
ファイル名だけが必要な場合は、他のグループを非キャプチャ ( (?:...)
) にすることもできます。