在PHP中处理文本以查找匹配的字符

时间:2018-04-18 02:35:57

标签: php

如何使用某些代码处理文本。

假设我有以下文字

git add .
git commit

应评估{::和::}之间的任何文本以获取其值。

我尝试使用空格作为分隔符将文本爆炸到数组,然后解析数组项以查找“{::”并且如果找到“{::”和“::}”之间的字符串并调用数据库来获取此字段值。 所以基本上这些都是db字段。

以下是我尝试的代码

Hello {::first_name::} {::last_name::},
How are you?
Your organisation is {::organisation::}

2 个答案:

答案 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

fiddle

答案 1 :(得分:0)

或者你可以简单地使用str_replace函数:

$data = "{:: string ::}";
echo str_replace("::}", "",str_replace("{::", "", $data));