Поскольку шаблон вашего шаблона ищет строки, заключенные в кавычки, например, "dolor ("
, вы можете найти эти значения, создать из них регулярное выражение для поиска совпадающей строки в исходной строке, а затем использовать это совпадение для замены шаблонов в шаблоне значением из исходной строки.
$string = 'Lorem ipsum dolor (Hello world) sit YEAH amet';
$template = 'consectetur adipiscing elit, sed do @BETWEEN("dolor (",") sit") eiusmod tempor incididunt ut labore et dolore @BETWEEN("sit","amet")';
preg_match_all('/@BETWEEN\("([^"]+)","([^"]+)"\)/', $template, $matches, PREG_SET_ORDER);
foreach ($matches as $temp) {
$regex = '/' . preg_quote($temp[1]) . '(.*?)' . preg_quote($temp[2]) . '/';
preg_match($regex, $string, $replacement);
$template = preg_replace('/' . preg_quote($temp[0]) . '/', $replacement[1], $template);
}
echo $template;
Выход:
consectetur adipiscing elit, sed do Hello world eiusmod tempor incididunt ut labore et dolore YEAH
Обратите внимание, что это не будет работать, если строки в шаблонах шаблонов также содержат экранированные кавычки. Чтобы реализовать эту функцию в этом случае, вам нужно будет использовать регулярное выражение, полученное из чего-то вроде this question .