Заменить все пробелы в строке внутри фигурных скобок - PullRequest
0 голосов
/ 30 декабря 2018

Мне нужно заменить все пробелы в строках внутри фигурных скобок (включая префикс).Пример:

С: x{Test test} test test x{Test test test } test {Test test}

До x{Test_test} test test x{Test_test_test } test {Test test}

(применимо только к x{} - когда фигурные скобки содержат префикс x)

Я могу сделать это с помощью lookhead / lookbehind, но это не работает в PHP / PCRE

`(?<=x\{[^\{\}]+)\s+(?=[^\{\}]+\})`

Проблема в том, как сделать это PHP / PCRE совместимым с функцией preg_replace?

1 Ответ

0 голосов
/ 30 декабря 2018

Для этого вы можете использовать \G базовое регулярное выражение:

$str = 'x{Test test} test test x{Test test test } test {Test test}';

$repl = preg_replace('/(?:x{|(?<!^)\G)[^\s}]*\K\s+(?!})/', '_', $str);
//=> x{Test_test} test test x{Test_test_test } test {Test test}

Демонстрация RegEx

Подробности RegEx:

  • \G устанавливает позицию в конце предыдущего совпадения или в начале строки первого совпадения.
  • (?:x{|(?<!^)\G): совпадения x{ или конец предыдущего совпадения
  • \K: сбросить информацию о текущем совпадении
  • \s+: пропустить 1+ пробел
  • (?!}): заявить, что у нас нет } немедленного опережающего
...