Neden Windows multi-line dosya içeriği benim preg_replace () başarısız?

1 Cevap php

Bir metin dosyası Qfile.txt var ve içerikleri aşağıda sunulmuştur, ve aynı bilgiler ile başka bir dosya oluşturmak istiyor ve ama cevaplar diffrent bulunmaktadır. Qfile1.txt, Qfile2.txt

Qfile.txt

Question "What is your age?"
Answer ""

Question "What you doing?"
Answer ""

Question "What is you name?"
Answer ""

Qfile1.txt

Question "What is your age?"
Answer "25"

Question "What you doing?"
Answer "chatting"

Question "What is you name?"
Answer "Midhun"

I want to read the questions from the Qfile.txt and store the informations to Qfile1.txt with in PHP. I wrote some code but the pattern matching is not working:

$contents=file_get_contents("Qfile.txt");
foreach(/*bla bla*/)
{
  $pattern = "/Question \"".preg_quote($id, '/')."\"\nAnswer \"\"/";

  $string = str_replace('"', '\"', $string);

  $replacement = "Question \"$id\"\nAnswer \"". $string . "\"";

  $result = preg_replace($pattern, $replacement, $contents);
}

preg_replace($pattern, $replacement, $contents); çalışmıyor.

1 Cevap

Çoğaltmak için açılamıyor; uygun adapte kodunuzu, aslında benim için çalışıyor. Aklıma tek şey, belki bir Windows makinede bu yazıyoruz ve metin dosyası CRLF satır sonlandırıcı olmasıdır. Bu durumda, için kodunuzu değiştirmeniz gerekir:

$contents=file_get_contents("Qfile.txt");
foreach(/*bla bla*/)
{
  $pattern = "/Question \"".preg_quote($id, '/')."\"(\r?\n)Answer \"\"/";

  $string = str_replace('"', '\"', $string);

  $replacement = "Question \"$id\"$1Answer \"". $string . "\"";

  $result = preg_replace($pattern, $replacement, $contents);
}

Değişiklikler $pattern = ve $replacement = hatları vardır. Bu sonlandırma desen (o, LF ve CRLF'yi destekleyen iki dışında) yerine hangisi hat korumak böylece ben yazdım.