さて、これを解析しようとしているとしましょう:
href="http://google.com">Website</a>
これは機能しません:
preg_match('/href="http:\/\/(.+)">/', $a, $b);
しかし、これは:
preg_match('/href="http:\/\/(.+)">Website/', $a, $b);
どうしてこれなの?最初のものは文字列の最後まで続きます。
さて、これを解析しようとしているとしましょう:
href="http://google.com">Website</a>
これは機能しません:
preg_match('/href="http:\/\/(.+)">/', $a, $b);
しかし、これは:
preg_match('/href="http:\/\/(.+)">Website/', $a, $b);
どうしてこれなの?最初のものは文字列の最後まで続きます。
ここでの問題は、セレクターが貪欲であることです。可能な限り最長の文字列に一致します。
preg_match('/href="http:\/\/(.+)">/', $a, $b);
「任意の文字」( )を使用しているため、入力文字列に存在する.
最後の出現まで一致します。">
セレクターを非貪欲にすると、可能な限り短い一致で停止します。
preg_match('/href="http:\/\/(.+?)">/', $a, $b);
正規表現パターンの余分な部分に注意してください?
。これは、「1 つ以上の」( +
) 演算子を貪欲でないように変更します。
u
Modifierを使用して、デフォルトですべてのセレクターを非貪欲にすることもできます。
preg_match('/href="http:\/\/(.+)">/u', $a, $b);
これは私が使用する最高のhrefパーサーです
preg_match("#href=[\"|']([^\"]*)[\"|']#",' '.$a.' ',$b);