PHPについて質問です。


現在preg_match関数で抜き取った文字を変数に入れて、それをWhile文で処理しているのですが、

自分が設定した条件式とは逆に動作をしてしまいます。

例えば

$html="<TD WIDTH=\"100%\"><B>一致するページはありませんでした。</B></TD>";

preg_match('|<B>一致するページはありませんでした。</B>|',$html,$abc);


while($abc == '<B>一致するページはありませんでした。</B>'){



echo "成功です。";


}

echo "失敗です。";

この場合は 成功です。 という文字が出てこないといけないのですが

失敗です。

という文字が出てきてしまいます。

これは何故なのでしょうか?

お手数をおかけしますがわかるかたおりましたらご回答よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/10/01 17:50:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:GoldenDawn No.1

回答回数426ベストアンサー獲得回数81

ポイント100pt

やりたいことがコードからよく読み取れないのですが……

なぜ「成功です。」と表示されないのかというと

$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 "成功です。";
}

とかになるでしょう。

「失敗です。」はループの外にあるので「成功しました。」表示されてもループを抜ければ表示されることになりますね。

id:aiomock

ご回答ありがとうございます。

2009/10/01 16:16:48
  • id:tdoi
    preg_matchのAPIドキュメントは見ましたか?
    第3引数には、マッチングした各部分の配列が来ますよ。

    print_r($abc);

    とでもして、まずは確認してみては?
  • id:aiomock
    ご回答ありがとうございます。

    print_r した場合ですが

    一致するページはありませんでした。(太字)

    で表示されました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません