У меня есть следующие короткие коды:
Уважаемый
{{name}}
,
- php / regex: "linkify" заголовки блога
- Использование регулярного выражения для удаления пустых тегов абзаца <p> </ p> (стандартное str_replace в «пробеле» не работает)
- Проверка UTF-8 в PHP без использования preg_match ()
- Соответствие символов UTF с preg_match в PHP: (* UTF8) Работает в Windows, но не в Linux
- Сохранение файла .php и сохранение включений тоже (возможно)
- Как правильно избежать обратного слэша, чтобы соответствовать буквальной обратной косой чертой в шаблонах регулярных выражений с одним кавычком и двойным кавычком
Вас приглашают на следующее мероприятие:
{{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']
. Однако это для более поздней стадии.
На данный момент я просто хочу знать, как совместить текст между двумя фигурными фигурными скобками.
благодаря
И для вторых операций, в которых вы нуждаетесь, это может быть так:
$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);