-3

PHPでpreg_match_allを理解しようとしています。友人と私は、数人の友人と楽しみのために小さなサイトを運営しており、主にコーディングを練習しています。しばらく前に、その画像のソースを削除するコードを含むセクションを追加しました。

$html = file_get_contents('http://www.anyrandomwebsite.com');
preg_match_all('/<img[^>]+>/i',$html, $result);

オンラインで見つけたばかりで、あまり意味がありませんでしたが、ページ上のイメージタグのインスタンスを見つけて配列に入れることは理解しています.

現在、ページ上のすべてのリンク (「http」で始まるもの) のソースを検索し、できれば特定の拡張子 (つまり、.net、または .zip) で終わるものだけを検索するコードを作成しようとしています。

しかし、パターンの書き方がわかりません。私は正規表現を学んでみましたが、私の友人が私に言ったことによると、画像タグを見つけるために使用されるコードは通常の規則に従っておらず、完全には理解していません。

基本的に、ページ上のリンクを見つけることができる preg_match_all を書いて、なぜそれが機能するのかを説明し、上記のコードがどのように機能するかを説明してくれる人を探しています (できれば、パターン部分の文字ごとに)

これに反応してくれる人、本当にありがとう!

4

1 に答える 1

1

あなたが持っている正規表現を説明するには:

/      # Starting regex delimiter
<img   # Match <img
[^>]+  # Match one or more characters that aren't a >
>      # Match a >
/      # Ending regex delimiter
i      # Case-insensitive option

それはどのように機能しますか?

imgタグがどのように見えるか想像してみてください。で始まり、<imgで終わり>ます。<imgそのため、タグを識別したら、最も近い まですべてを一致させる必要があり>ます。

つまり、. ではない限り、できるだけ多くの文字を一致させる必要があり>ます。そして、それはまさにそれ[^>]+です。これらの文字の少なくとも 1 つが必要なため (<img>は無効です)、+「0 個以上」 の代わりにa を使用し*ます。

ここで問題が発生する可能性があります: タグにどこかに (属性など)含まれている場合はどうなりますか? >そして、正規表現を使用して HTML を解析することが危険にさらされる理由の 1 つがここにあります。

于 2012-11-04T06:42:04.500 に答える