1

さて、これを解析しようとしているとしましょう:

href="http://google.com">Website</a>

これは機能しません:

preg_match('/href="http:\/\/(.+)">/', $a, $b);

しかし、これは:

preg_match('/href="http:\/\/(.+)">Website/', $a, $b);

どうしてこれなの?最初のものは文字列の最後まで続きます。

4

2 に答える 2

5

貪欲なセレクター

ここでの問題は、セレクターが貪欲であることです。可能な限り最長の文字列に一致します。

preg_match('/href="http:\/\/(.+)">/', $a, $b);

「任意の文字」( )を使用しているため、入力文字列に存在する.最後の出現まで一致します。">

貪欲でないセレクター

セレクターを非貪欲にすると、可能な限り短い一致で停止します。

preg_match('/href="http:\/\/(.+?)">/', $a, $b);

正規表現パターンの余分な部分に注意してください?。これは、「1 つ以上の」( +) 演算子を貪欲でないように変更します。

uModifierを使用して、デフォルトですべてのセレクターを非貪欲にすることもできます。

preg_match('/href="http:\/\/(.+)">/u', $a, $b);
于 2013-02-08T09:37:40.310 に答える
0

これは私が使用する最高のhrefパーサーです

 preg_match("#href=[\"|']([^\"]*)[\"|']#",' '.$a.' ',$b);
于 2013-02-08T09:34:57.480 に答える