Справка по регулярному выражению PHP Regex

В основном у меня есть текст, который выглядит следующим образом:

{hello|hi} this {is really|is actually} great. 

Я хочу создать регулярное выражение для preg_replace, которое заменит слово «действительно», за исключением сложной части, что я не хочу, чтобы слово находилось внутри {}

Я пытаюсь использовать функцию поиска регулярных выражений, но я просто не могу получить синтаксис, который проверяет, находится ли он в {, но не раньше}.

Попробуй это

 (?<!{)([^{}\r\n]*?)really(?![^{\r\n]*}) 

и заменить на

 $1Replacement 

См. Здесь, в Regexr

Ограничения:

  • Нет вложенных скобок
  • Нет несогласованных скобок

Одна из проблем заключается в том, что PHP допускает только фиксированную длину lookbehind, поэтому вам нужно заменить на $1 + Replacement

(?<!{) отрицательный взгляд за утверждением, нет { слева

([^{}\r\n]*?) отрицательный класс символов, не допускает {} и символы разрыва строки (вы можете попробовать без необходимости), ленивый, сопоставленный 0 или более раз, содержимое этой группы хранится в $1

(?![^{\r\n]*}) отрицательный взгляд вперед утверждение не позволяет a } следовать с { или разрывом символа линии между ними.