dポイントプレゼントキャンペーン実施中!

正規表現の「^」と「$」を使うとうまく働いてくれません。

あるデータの中の、行頭がhttpで始まる1行を取り出したいです。

あるデータ$dataを
preg_match_all("/^http(.*?)$/",$data,$result);
print_r($result);
で出力すると、

■結果
Array ( [0] => Array ( ) [1] => Array ( ) )

となり、うまくいきません。

preg_match_all("/http(.*?)\n/",$data,$result);
やけでこんな感じにやったら、行頭から始まるhttp.....も行頭からはじまらないものもゲットしてすべて出力してくれてしまいます。

行頭から始まるものだけを出力するにはどうしたらいいでしょうか。

php5
UTF-8環境

A 回答 (2件)

今回一番問題になっている箇所自体は、ANo1さんの仰っている修飾子の部分だと思います。


http://php.net/manual/ja/reference.pcre.pattern. …

これで解決だとは思うのですが、一応以下をコメントさせて下さい

<おまけ>
正規表現はただでさえ読みづらくなる&重くなるので、用件を満たせる範囲でコンパクトに記述する事をお勧めします。
特にこのケースだと、行末指定や最短マッチ、キャプションの括弧等を利用する必要性が見受けられません

単にマッチ判定だけならこれでいいでしょうし
/^http/m

今回のように抜き出す必要があるのであれば
/^http.*/m
https://ideone.com/T4MSJ

でどうでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました!!おーっと、っていう感じで無事出力されました。

修飾詞も理解が深まったので、本当に助かりました。
感謝申し上げます。

お礼日時:2011/07/25 22:35

preg_match_all("/^http(.*?)$/m",$data,$result);


としたらうまくいくと思います。
    • good
    • 0
この回答へのお礼

一気解決です。
ありがとうございます。

修飾詞が必要だったとは気がつきませんでしたし、探しても出てこなかったのは検索力不足です。
邁進したいと思います。
感謝です!

お礼日時:2011/07/25 22:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!