- ベストアンサー
preg_matchの 正規表現
$phperr = failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found ; から、preg_match(' ',$phperr,$match)で、 404だけを取り出すパターン表現を教えてください。お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1の方の回答で解決しそうですが。 > Array ( [0] => HTTP/1.1 404 [1] => 404 ) > と出ました。これはマッチした結果が2つあった、と理解してよろしいのですか? [0] の要素は、正規表現全体にマッチした部分で、 [1]の要素は正規表現の中にある一番目のカッコで捕獲された内容です。 "#HTTP/1\.[01]\s*([0-9]{3})#" カッコの中にあるのは [0-9]{3} (十進の数字三桁)ですので マッチ結果の配列の [1] だけ見れば必要なステータスコードは得られます。 RFCによると、このようなステータス行は Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF のようなフォーマットになっているとのことですので、 #(?<=HTTP/1\.[01] )\d\d\d# で必要なステータスコードだけ取れると思います。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
前提条件があいまいすぎます。 /404/ で、「404だけをとりだす」ことはできます。 $phperr = 'failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found'; preg_match('/404/',$phperr,$match); print($match[0]); 404 が、多分こういう回答がお望みではないですよね。 どういったデータあって、そのなかからどのような404を取り出したいのかを もう少し詳しくお願いします。
補足
失礼しました。 やりたいことは、$php_errormsgからコード番号だけを取り出し、 集計リストにするというものです。
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
"#HTTP/1\.[01]\s*([0-9]{3})#" こんなのはどうでしょうか。
お礼
回答ありがとうございます。 print_r()してみると、 Array ( [0] => HTTP/1.1 404 [1] => 404 ) と出ました。これはマッチした結果が2つあった、と理解してよろしいのですか?
お礼
後半の説明についていけませんでしたが、勉強するきっかけになりました。ありがとうございました。