0

私はこのような文字列を持っています

image/jpeg; name="3.jpg"

3.jpgPHPの正規表現で抜き出したい。私は使っている

$test='image/jpeg; name="3.jpg"';

preg_match('/^.*image\/(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG).*(name=(.+))?$/',$test, $matches);

しかし、それは名前を引き出していません。どこが間違っているのか教えてください

4

1 に答える 1

0

あなたの問題はこれです:

.*(name=(.+))?$

まず、.*文字列の最後まですべてに一致します。

では、(name=(.+))?何にもマッチできませんが、任意なのでOKです。したがって、一致は成功しましたが、何もキャプチャされていません。

/^.*image\/(?:GIF|PNG|JPG|JPEG).*?(?:name=(.+))?$/i

この場合、.*?一致する文字をできるだけ少なくすることが役立ちます。image(また、 andで大文字と小文字を区別しない限り、修飾子nameを使用して正規表現を短縮できます。)/i

ファイル名だけが必要な場合は、他のグループを非キャプチャ ( (?:...)) にすることもできます。

于 2013-02-01T11:40:29.947 に答える