- 締切済み
正規表現での改行数を求めるにあたって
以下の文字列がフォームから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で統一していますが関係ありますか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Redpython
- ベストアンサー率56% (9/16)
こんにちは。 パターンマッチングで取得した値を表示する前に、ASCII コード上、どのような値として取得したのかをチェックしてみてはいかがでしょうか?
- wp_
- ベストアンサー率54% (132/242)
送信されたデータは 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が送られてくるという認識で会っていますでしょうか?