застрял на простой preg_replace с обратной ссылкой - PullRequest
1 голос
/ 04 мая 2020

Извините, ребята, я застрял на этом:

$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» в конце, потому что я хочу, чтобы это происходило ТОЛЬКО в строке, соответствующей этому идентификатору.

Что я делаю не так?

1 Ответ

1 голос
/ 04 мая 2020

Я предлагаю использовать

preg_replace('/\b(' . $id . '\b.*)(\R)/', '$1 ' . $text . '$2', $data_update, 1);

Шаблон будет выглядеть как \b(23423\b.*)(\R) и будет соответствовать

  • \b - граница слова
  • (23423\b.*) - Группа 1: идентификатор как целое слово, а затем остаток строки
  • (\R) - Группа 2: любая последовательность разрыва строки

См. full PHP демо :

$id = '23423';
$s = '|';
$text = 'content to insert';
$data_update = "Some text 23423 in between end\nsome text";
$data_update = preg_replace('/\b(' . $id . '\b.*)(\R)/', '$1 ' . $text . '$2', $data_update, 1);

Выход:

Some text 23423 in between end content to insert
some text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...