Строка извлечения регулярных выражений между двумя фигурными фигурными скобками

У меня есть следующие короткие коды:

Уважаемый {{name}} ,

Вас приглашают на следующее мероприятие: {{event}}

привет, {{author}}

У меня есть массив из базы данных: $data

где:

 $data['name'] = 'John Doe'; $data['event'] = 'Party yay!'; $data['author'] = 'Kehke Lunga'; 

Результат, который я ожидаю:

Дорогой Джон Доу,

Вас приглашают на следующее мероприятие: Party yay!

привет, Kehke Lunga

Кроме того, я также хочу выполнять такие операции, как {{firstname||lastname}} который должен либо проверить, установлен ли ключ $data['firstname'] , если он не должен использовать $data['lastname'] . Однако это для более поздней стадии.

На данный момент я просто хочу знать, как совместить текст между двумя фигурными фигурными скобками.

благодаря

Solutions Collecting From Web of "Строка извлечения регулярных выражений между двумя фигурными фигурными скобками"

И для вторых операций, в которых вы нуждаетесь, это может быть так:

 $str = "Dear {{name||email}}, You are being invited for the following event: {{event}}. Regards, {{author}}"; // $data['name'] = 'John Doe'; $data['email'] = 'JohnDoe@unknown.com'; $data['event'] = 'Party yay!'; $data['author'] = 'Kehke Lunga'; $pattern = '/{{(.*?)[\|\|.*?]?}}/'; $replace = preg_replace_callback($pattern, function($match) use ($data) { $match = explode('||',$match[1]); return isset($data[$match[0]]) ? $data[$match[0]] : $data[$match[1]] ; }, $str); echo $replace; 

В основном, отредактировав «$ pattern», а затем найдите правильную логику, необходимую внутри обратного вызова.

С preg_match_all() :

 $pattern = '~\{\{(.*?)\}\}~'; preg_match_all($pattern, $string, $matches); var_dump($matches[1]); 

Использовать preg_replace_callback :

 $data = array( 'name' => 'John Doe', 'event' => 'Party yay!', 'author' => 'Kehke Lunga', ); $str = 'Dear {{name}}, You are being invited for the following event: {{event}} regards, {{author}}'; $str = preg_replace_callback('/{{(\w+)}}/', function($match) use($data) { return $data[$match[1]]; }, $str ); echo($str); 

вывод:

 Dear John Doe, You are being invited for the following event: Party yay! regards, Kehke Lunga 

Используйте preg_match для соответствия тексту между двумя фигурными фигурными скобками:

 $subject = "{{Lorem}}"; $pattern = '/\{\{([^}]+)\}\}/'; preg_match($pattern, $subject, $matches); var_dump($matches); 

Взгляните на аналогичный вопрос

 $matches = array(); $a="{{name}}"; preg_match('/\{(.+)\{(.+)\}\}/', $a, $matches); var_dump($matches);