電子書籍の厳選無料作品が豊富!

$data1 = file_get_contents("xxxx.txt");
で、読み込んだデータの中に



aaaaaa
bbbbbb

xxxxx
yyyyyy

111111

2222222




というレコードが入っていたとします。
この中で、改行だけの行を削除し、$data2 に移したいのです。

先頭行と最終行は、trimで削除できましたが、
$data1 = str_replace("^\\n", "", $data2);
でも除去できません。

どうすればいいのか、お教えください。

A 回答 (6件)

$data1 = preg_replace("\n\n+", "\n", $data2);


preg_replaceの第一引数はデリミタが必要なのです。

$data1 = preg_replace("/\n\n+/", "\n", $data2);
$data1 = preg_replace("@\n\n+@", "\n", $data2);
こんな感じ。

str_replaceはデリミタがいらないですね。
$data1 = preg_replace("\n\n", "\n", $data2);
こんな感じ。でもこれだと完全じゃないのでpregのほうのコードが正確ですね。
    • good
    • 0
この回答へのお礼

その後、いろいろと試してみました。
なんとか、私が実現したいことは、とりあえずできました。

皆様、ありがとうございました。

お礼日時:2007/11/01 21:43

ま、2つ以上なら{2,}とかでよさそうですけどね、


$data1 = preg_replace("/\n{2,}/", "\n", $data2);

そもそも1つ以上の\nを\nに変えれるのでもおかしくはないです
$data1 = preg_replace("/\n+/", "\n", $data2);
    • good
    • 0

> str_replaceは正規表現を引数にとらないのでは?


うひゃー、失礼しました m(_ _)m
str_replaceをpreg_replaceに読み替えてください。
    • good
    • 0
この回答へのお礼

bgbgさん、sakusaker7さん、

早速の回答ありがとうござすます。

しかし、
$data1 = preg_replace("\n\n+", "\n", $data2);
を実行したら、

Warning: preg_replace() [function.preg-replace]: No ending delimiter '+' found in ・・・

というエラーが出ました。

お礼日時:2007/10/31 17:29

> $data1 = str_replace("\n\n+", "\n", $data2);



str_replaceは正規表現を引数にとらないのでは?

PHP: str_replace - Manual
http://www.php.net/str_replace
PHP: preg_replace - Manual
http://www.php.net/manual/ja/function.preg-repla …

<?php
$str = "aaabbbccc\n";
$s1 = str_replace("b+", "", $str);
$s2 = preg_replace("/b+/", "", $str);
print_r($s1);
print_r($s2);

aaabbbccc
aaaccc
    • good
    • 0

2つ以上改行が連続している部分を1つに置き換えればいいので


$data1 = str_replace("\n\n+", "\n", $data2);
となります。
    • good
    • 0

正規表現で改行が2つ以上続いているところを改行ひとつに置き換えるというのはどうでしょう?

    • good
    • 0

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