Как переместить подстроку с preg_replace или preg_match в PHP? - PullRequest
0 голосов
/ 15 октября 2018

Я хочу найти подстроку и переместить ее в строку вместо замены (например, переместить ее от начала до конца строки).

'THIS the rest of the string' -> 'the rest of the string THIS'

Я делаю это с помощью следующего кода

preg_match('/^(THIS).?/', $str, $match);
$str = trim( $str . $match[1] );
$str = preg_replace('/^(THIS).?/', '', $str);

Должен быть более простой способ сделать это с одним регулярным выражением.

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете использовать

$re = '/^(THIS)\b\s*(.*)/s';
$str = 'THIS the rest of the string';
$result = preg_replace($re, '$2 $1', $str);

См. Демонстрационную версию regex и демонстрационную версию PHP .

Подробно

  • ^ - начало строки
  • (THIS) - Группа 1 (ссылка на $1 из шаблона замены): THIS
  • \b - граница слова (если вам не нужно целое слово, вы можете удалить его)
  • \s* - 0+ пробелов (если всегда есть хотя бы один пробел, используйте \s+ и удалите\b, так как он станет избыточным)
  • (.*) - Группа 2 (на которую указывает $2 из шаблона замены): остальная часть строки (модификатор s позволяет . соответствоватьсимволы перевода строки тоже).
...