重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以下の文字列がフォームからPOSTされたとします。
-------------------
1
2

3


4



5
-------------------


ポストされた文字列が$strに格納されているとして、
以下を実行しました。
-------------------
print preg_match_all("[\n\r]",$str, $dummy);
print preg_match_all("[\r\n]",$str, $dummy);
print preg_match_all("[\r]",$str, $dummy);
print preg_match_all("[\n]",$str, $dummy);
-------------------


結果はこうなりました。
-------------------
6
6
10
10
-------------------


どうやらマッチパターンが"[\n\r]"と"[\r\n]"の場合は空白行の数を、
"[\r]"と"[\n]"の場合は純粋に改行数を返しているようです。
どうしてこのような差が出るのでしょうか?


文字コードはEUC、改行コードはLFで統一していますが関係ありますか?

A 回答 (2件)

こんにちは。



パターンマッチングで取得した値を表示する前に、ASCII コード上、どのような値として取得したのかをチェックしてみてはいかがでしょうか?
    • good
    • 0

送信されたデータは


1\r\n2\r\n\r\n3\r\n\r\n\r\n4\r\n\r\n\r\n\r\n5
となってると推測。

1\r\n2\r[\n\r]\n3\r[\n\r][\n\r]\n4\r[\n\r][\n\r][\n\r]\n5
6個

1[\r\n]2[\r\n][\r\n]3[\r\n][\r\n][\r\n]4[\r\n][\r\n][\r\n][\r\n]5
10個

1[\r]\n2[\r]\n[\r]\n3[\r]\n[\r]\n[\r]\n4[\r]\n[\r]\n[\r]\n[\r]\n5
10個

1\r[\n]2\r[\n]\r[\n]3\r[\n]\r[\n]\r[\n]4\r[\n]\r[\n]\r[\n]\r[\n]5
10個

となります。
逆にpreg_match_all("[\r\n]", $str, $dummy)こいつが6を返しているのが不思議でなりません。

この回答への補足

なんとなく理解できました。
ソースの改行コードがLFというのは関係ないんですね。

POSTする文字列はFORMのTEXTAREAからを想定しているのですが、
Windowsなら\r\nが、Macなら\rが、LINUXなら\nが送られてくるという認識で会っていますでしょうか?

補足日時:2007/10/11 14:57
    • good
    • 0

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