У меня есть воспроизводимый пример, демонстрирующий странное поведение функции PHP preg_replace
. Итак, у меня есть два файла с таким содержанием:preg_replace неправильное или странное поведение в PHP
//new.txt
<!-- start -->Replacement 2\1<!-- end -->
//before.txt
<!-- start -->Text to replace<!-- end -->
Когда я делаю это:
$regex = "`<!-- start -->(.*?)<!-- end -->`";
$replacement = file_get_contents("new.txt");
$target = file_get_contents("before.txt");
$after = preg_replace($regex, $replacement, $target);
echo $after;
печатает:
<!-- start -->Replacement 2Text to replace<!-- end -->
, которая на самом деле неверно. Но когда я делаю это:
$regex = "`<!-- start -->(.*?)<!-- end -->`";
$replacement = "<!-- start -->Replacement 2\1<!-- end -->";
$target = "<!-- start -->Text to replace<!-- end -->";
$after = preg_replace($regex, $replacement, $target);
echo $after;
печатает:
<!-- start -->Replacement 2<!-- end -->
, который является более правильным (хотя, как вы можете видеть, последний "\ 1" исчез). BTW, если я удалю «\ 1», оба примера начнут работать правильно. Итак, как я могу это исправить?
Интересно, почему люди голосуют вниз, даже если я обеспечил воспроизводимые примеры и мои собственные фрагменты кода. – Jacobian
Кроме того, обратите внимание, что я сказал «неправильное или странное поведение», поэтому я не настаиваю на том, что это ошибка PHP. Наверное, я просто делаю что-то не так. – Jacobian
Итак, если бы я спросил какую-то глупость, почему бы не указать на эту глупость? Зачем это молчаливое голосование? – Jacobian