まず第一に、正規表現を使用してランダムな html を解析しようとしないでください。遅かれ早かれ、機能しなくなります。正規表現は html を解析するためのツールではなく、正しく解析できません。3 つの簡単な例:
<a href='stuff'> (different quotes)
<!-- <a href="stuff">-->
<a style='something' href="stuff">
これらはアプリケーションを壊します。他にも無数の例がありますが、それらは機能せず、壊れてしまいます! Chuck Norris でさえ正規表現を使用して html を正しく解析できません。
しかし、あなたはすでにそれを知っていると思います.これは既知のhtmlのごく単純で限られた量であり、一般に公開されることはないので、あなたの質問に戻りましょう:
preg_match_all は、区切り文字を含む正規表現を想定しており、その間に記述したすべてのものと一致します。あなたが書くなら
'<a href="(.*?)">'
正規表現として、先頭の「<」を区切り文字として扱うため、一致しません。その周りにスラッシュ (またはその他の文字) を書きます。
preg_match_all('/<a href="(.*?)">/', $page, $result);
これで、次のように一致します。
[0] => <a href="/stuff">
しかし、「/stuff」だけが必要です。$result は配列を提供します。$result[0] は一致したすべての正規表現であり、$result[1] は最初に () 一致し、$result[2] は 2 番目に () 部分式が一致する、というように... $result[1] を調べるには、必要なものが見つかるはずです。