1

ファイル test.txt があり、それをトラバースしたいと考えています。「here」という文字列を隠したら、次の行に「test」を配置したいと思います。

            $lines = array();
            $match = 'here';
            foreach(file('test.txt') as $line)
            {
            if((string)$match == (string)$line)
            {

                    array_push($lines, 'this');;
            }
            array_push($lines, $line);

残念ながら、txt ファイルに「here」があっても、if ステートメントが true として解決されることはありません。

ありがとう

4

3 に答える 3

1

クレジットはVedran Šegoのコメントから引用します。

問題は$line改行が含まれていることです。それを削除するには、trim()を使用します。

編集:このコードには、 Jonのコメントで以下に記載されているように、いくつかの問題がある可能性があり、あなたがやりたいことを誤解しているようです (「追加」する代わりに、一致した文字列を置き換えました)

foreach(file('test.txt') as $line){
   if($match === trim($line)){
      array_push($lines, 'this');
   }
   array_push($lines, trim($line));
}
于 2013-05-18T15:10:25.333 に答える
1

テキストを行ごとに特に処理する必要がない場合は、正規表現を使用してこれを非常に簡単に行うこともできます。

$text = file_get_contents('test.txt');
$text = preg_replace('/^(here)$/m', "\\1\ntest", $text);

このタイプのソリューションには、注意が必要な重要な点がいくつかあります。

  • /m 正規表現は、複数行モード (修飾子)で使用する必要があります。
  • 一致したテキストは括弧内に配置されるため、置換文字列内で参照できます。このようにして、より複雑な式を簡単に使用して、コンテンツを後に追加する行に一致させることができます。
  • 入力ファイルに Unix スタイルの行末がない場合 (実際には、これは「Windows アプリケーションによって作成された場合」を意味します)、各改行の\r前の追加文字を考慮して式を変更する必要があります。 \nUnix と Windows の両方の行末は

    $text = preg_replace("/^(here)(\r?\n)/m", "\\1\\2test\\2", $text);
    
于 2013-05-18T15:25:05.983 に答える