如何使用某些代码处理文本。
假设我有以下文字
git add .
git commit
应评估{::和::}之间的任何文本以获取其值。
我尝试使用空格作为分隔符将文本爆炸到数组,然后解析数组项以查找“{::”并且如果找到“{::”和“::}”之间的字符串并调用数据库来获取此字段值。 所以基本上这些都是db字段。
以下是我尝试的代码
Hello {::first_name::} {::last_name::},
How are you?
Your organisation is {::organisation::}
答案 0 :(得分:1)
你的脚本似乎很好。 Your script in fiddle
如果您正在寻找替代方式,可以尝试将preg_match_all()与str_replace(数组,数组,源)一起使用
<?php
$bean = new stdClass();
$bean->first_name = 'John';
$bean->last_name = 'Doe';
$bean->organisation = 'PHP Company';
$string = "Hello {::first_name::} {::last_name::}, How are you? Your organisation is {::organisation::}";
// find all placeholders
preg_match_all('/{::(.+?)::}/i', $string, $matches);
$placeholders = $matches[0];
//strings inside placeholders
$parts = $matches[1];
// return values from $bean by matching object property with strings inside placeholders
$replacements = array_map(function($value) use ($bean) {
// use trim() to remove unexpected space
return $bean->{trim($value)};
}, $parts);
echo $newstring = str_replace($placeholders, $replacements, $string);
短格式:
$string = "Hello {::first_name::} {::last_name::}, How are you? Your organisation is {::organisation::}";
preg_match_all('/{::(.+?)::}/i', $string, $matches);
$replacements = array_map(function($value) use ($bean) {
return $bean->{trim($value)};
}, $matches[1]);
echo str_replace($matches[0], $replacements, $string);
如果您更喜欢使用功能:
function holder_replace($string, $source = null) {
if (is_object($source)) {
preg_match_all('/{::(.+?)::}/i', $string, $matches);
$replacements = array_map(function($value) use ($source) {
return (property_exists(trim($value), 'source')) ? $source->{trim($value)} : $value;
}, $matches[1]);
return str_replace($matches[0], $replacements, $string);
}
return $string;
};
echo holder_replace($string, $bean);
输出:
Hello John Doe, How are you? Your organisation is PHP Company
答案 1 :(得分:0)
或者你可以简单地使用str_replace函数:
$data = "{:: string ::}";
echo str_replace("::}", "",str_replace("{::", "", $data));