Reputation: 1061
I have the following short codes:
Dear
{{name}}
,You are being invited for the following event:
{{event}}
regards,
{{author}}
I have an array from the database :
$data
where:
$data['name'] = 'John Doe';
$data['event'] = 'Party yay!';
$data['author'] = 'Kehke Lunga';
Output that I expect:
Dear John Doe,
You are being invited for the following event: Party yay!
regards, Kehke Lunga
also, I also want to perform operations like {{firstname||lastname}}
which should either check if key $data['firstname']
is set, if it isn't it should use $data['lastname']
. However, that is for later stage.
For now, I just want to know how to match the text between 2 curly braces.
Thanks
Upvotes: 4
Views: 4155
Reputation: 121
Use preg_match
to match the text between 2 curly braces :
$subject = "{{Lorem}}";
$pattern = '/\{\{([^}]+)\}\}/';
preg_match($pattern, $subject, $matches);
var_dump($matches);
Take a look at similar Question
Upvotes: 2
Reputation: 157947
With preg_match_all()
:
$pattern = '~\{\{(.*?)\}\}~';
preg_match_all($pattern, $string, $matches);
var_dump($matches[1]);
Upvotes: 4
Reputation: 3695
And for the second operations you need it could be something this way:
$str = "Dear {{name||email}}, You are being invited for the following event: {{event}}. Regards, {{author}}";
// $data['name'] = 'John Doe';
$data['email'] = '[email protected]';
$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;
Basically by editing the '$pattern', and then find the correct logic needed inside the callback.
Upvotes: 3
Reputation: 121
$matches = array();
$a="{{name}}";
preg_match('/\{(.+)\{(.+)\}\}/', $a, $matches);
var_dump($matches);
Upvotes: 1
Reputation: 368954
$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);
output:
Dear John Doe,
You are being invited for the following event: Party yay!
regards, Kehke Lunga
Upvotes: 3