現在preg_match関数で抜き取った文字を変数に入れて、それをWhile文で処理しているのですが、
自分が設定した条件式とは逆に動作をしてしまいます。
例えば
$html="<TD WIDTH=\"100%\"><B>一致するページはありませんでした。</B></TD>";
preg_match('|<B>一致するページはありませんでした。</B>|',$html,$abc);
while($abc == '<B>一致するページはありませんでした。</B>'){
echo "成功です。";
}
echo "失敗です。";
この場合は 成功です。 という文字が出てこないといけないのですが
失敗です。
という文字が出てきてしまいます。
これは何故なのでしょうか?
お手数をおかけしますがわかるかたおりましたらご回答よろしくお願いいたします。
やりたいことがコードからよく読み取れないのですが……
なぜ「成功です。」と表示されないのかというと
$abc == '<B>一致するページはありませんでした。</B>'
が真にならないからで、なぜ真にならないかというと $abc が配列だからです。
$abc[0] == '<B>一致するページはありませんでした。</B>'
にすると真になりますが、それだけだと永久ループになってしまいます。
実際のコードでは while の中で他の処理が入るのでかまわないというのならよいのですが、
一回だけなら if でいいですし、複数回マッチさせてそれぞれに処理なら preg_match_all を使い、
preg_match_all('|<B>一致するページはありませんでした。</B>|',$html,$abc); foreach ($abc as $m){ if ($m == '<B>一致するページはありませんでした。</B>') echo "成功です。"; }
とかになるでしょう。
「失敗です。」はループの外にあるので「成功しました。」表示されてもループを抜ければ表示されることになりますね。
ご回答ありがとうございます。