Php 卡在一个简单的preg_替换为backreference上

Php 卡在一个简单的preg_替换为backreference上,php,regex,preg-replace,regex-group,backreference,Php,Regex,Preg Replace,Regex Group,Backreference,对不起,伙计们,我被困在这上面了: $data_update = preg_replace($id.'(.*?)'.$s.PHP_EOL, $id.$1.$s.$text.PHP_EOL, $data_update, 1); $id = '23423'; $s = '|'; $text = 'content to insert'; 基本上,我要做的是在一个有多行的平面文件文本中匹配$id和PHP行尾之间的所有内容,并将其替换为在行尾之前插入一些内容的同一行。我在末尾有“1”修饰符,因为我希望

对不起,伙计们,我被困在这上面了:

$data_update = preg_replace($id.'(.*?)'.$s.PHP_EOL, $id.$1.$s.$text.PHP_EOL, $data_update, 1);

$id = '23423';
$s = '|';
$text = 'content to insert';
基本上,我要做的是在一个有多行的平面文件文本中匹配$id和PHP行尾之间的所有内容,并将其替换为在行尾之前插入一些内容的同一行。我在末尾有“1”修饰符,因为我希望这只发生在与该id匹配的行上

我做错了什么?

我建议使用

preg_replace('/\b(' . $id . '\b.*)(\R)/', '$1 ' . $text . '$2', $data_update, 1);
该模式看起来像
\b(23423\b.*)(\R)
,并且将匹配

  • \b
    -单词边界
  • (23423\b.*)
    -第1组:ID作为一个单词,然后是行的其余部分
  • (\R)
    -第2组:任何换行顺序
见:

输出:

Some text 23423 in between end content to insert
some text

为什么要使用
$s=“|”
?请张贴该行的例子。可能您需要
preg\u replace('/\b('.$id'.\b.*)(\R)/','$1'.$text'.$2',$data\u update,1)?请参阅。@WiktorStribiżew我需要为EOL进行修补,因为行尾已作为PHP_EOL插入到平面文件文本中,所以您可以将我的数据变量视为:
$data_update=“23423在某些文本之间”。PHP_EOL
$data\u update.=“00000在更多文本之间”。PHP\u EOL
$data\u update.=“11111在更多文本之间”。PHP\u EOL如果你需要帮助,请提供一个。你的例子很有帮助,PHP演示对我来说很好!谢谢大家!@WiktorStribiżew
Some text 23423 in between end content to insert
some text