如何搜索和替换文件中特定文本后的下一个值 - PHP

How to search and replace the next value after specific text in a file - PHP

我想在 #id:

特定字符之后搜索并替换 PO file (its a translation file for CakePHP) 中的字符串

这是 PO 文件中的示例文本。

#id: 4
msgctxt "team 1"
msgid "john"
msgstr "전세계 강사와 영어회화 레슨을 받을 수 있는 서비스입니다."

#id: 5
msgctxt "team 2"
msgid "jane"
msgstr "translation here"

#id: 6
msgctxt "team 3"
msgid "jen"
msgstr "translation here"


..
and so on..

例子。我想从我的数据库中替换 #id: 5 之后的字符串 msgctxt, msgid, msgstr

I got this column in my database msgid, msgctxt and msgstr

预期的输出将是这样的:

#id: 4
msgctxt "team 1"
msgid "john"
msgstr "전세계 강사와 영어회화 레슨을 받을 수 있는 서비스입니다."

#id: 5
msgctxt "team 2"
msgid "jane"
msgstr "translation here"

#id: 6
msgctxt "team 3"
msgid "jen"
msgstr "translation here"


..
and so on..

我试过这个,但我不知道如何在 PO 文件中使用 str_replace 查找字符串。

$newContent .= '#id: ' . $po['id'] . "\n";
$newContent .= 'msgctxt "' . trim($po['msgctxt']) . '"' . "\n";
$newContent .= 'msgid "' . trim($po['msgid']) . '"' . "\n";
$newContent .= 'msgstr "'  . trim($po['msgstr']) . '"';


$file = file_get_contents($filepath);
$data = str_replace($file, $newContent, $file); // I dont think if its correct to find the string.
file_put_contents($filepath, $data);

请注意:#id: 是动态的。

更新: 有时,我会在 PO 文件中获取这些数据。

#id: 4
#: https://url // sometimes don't have this
msgctxt "team 1" // sometimes don't have this
msgid "john"
msgstr "translation here"

#id: 5
msgid "jane"
msgstr "translation here"

#id: 6
msgctxt "team 3"
msgid "jen"
msgstr "translation here"

嗯,我想你可以试试这个:

$file = <<<str
#id: 4
msgctxt "team 1"
msgid "john"
msgstr "전세계 강사와 영어회화 레슨을 받을 수 있는 서비스입니다."

#id: 5
msgctxt "team 2"
msgid "jane"
msgstr "translation here"

#id: 6
msgctxt "team 3"
msgid "jen"
msgstr "translation here"


..
and so on..
str;

$newContent = <<<str
#id: 
msgctxt ""
msgid ""
msgstr ""
str;

$data = preg_replace('/#id:\s*([0-9]+)\s*\nmsgctxt\s*"(.*?)"\s*\nmsgid\s*"(.*?)"\s*\nmsgstr\s*"(.*?)"/', $newContent, $file);

</code>、<code></code>指的是<code>msgctxtmsgidmsgstr后面的原文内容,改成任何你喜欢的信息。您也可以将 [0-9]+ 更改为您想要的任何特定 ID。