PHP替换标签或字符之间的一些字符串

时间:2019-01-28 17:01:43

标签: php json regex replace

我需要替换字符串中的一些文本。我认为一个例子可以更好地解释:

[myFile.json]

df.replace('.',np.nan)

[example.php]

{ "Dear":"newString1", "an example string":"newString2" }

因此,我需要在'@'符号之间找到任何字符串,对于找到的每个字符串,我都需要使用gimmeNewVal()函数进行替换。

我已经尝试过使用preg_ *函数,但使用正则表达式的能力却不是很强...

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

您可以使用preg_replace_callback函数

$myString = "@Dear@ name, this is @an example string@.";

$obj = json_decode(file_get_contents('myFile.json'));

echo preg_replace_callback('/@([^@]+)@/', 
        function ($x) use($obj) { return isset($obj->{$x[1]}) ? $obj->{$x[1]} : ''; }, 
        $myString);

demo

答案 1 :(得分:0)

您可以使用preg_match_all使用正则表达式@somestring@来匹配类型为@([^@]+)@的所有字符串,然后遍历for循环以将原始字符串中的每个这样找到的字符串替换为替换为函数gimmeNewVal中的实际值,该函数将返回给定json中的值。

这是相同的PHP代码,

$myString = "@Dear@ name, this is @an example string@.";

function gimmeNewVal($myVal){ // I've replaced your function from this to make it practically runnable so you can revert this function as posted in your post
    $obj = json_decode('{ "Dear":"newString1", "an example string":"newString2" }');
    return $obj->$myVal;
}

preg_match_all('/@([^@]+)@/', $myString, $matches);
for ($i = 0; $i < count($matches[1]); $i++) {
    echo $matches[1][$i].' --> '.gimmeNewVal($matches[1][$i])."\n";
    $myString = preg_replace('/'.$matches[0][$i].'/',gimmeNewVal($matches[1][$i]), $myString);

}
echo "\nTransformed myString: ".$myString;

打印转换后的字符串,

Dear --> newString1
an example string --> newString2

Transformed myString: newString1 name, this is newString2.

让我知道这是否是您想要的。

答案 2 :(得分:0)

您也可以使用T-Regx tool

pattern('@([^@])@')->replace($input)->all()->by()->map([
    '@Dear@' => "newString1", 
    '@an example string@' => 'newString2'
]);

pattern('@([^@])@')->replace($input)->all()->group(1)->by()->map([
    'Dear' => "newString1", 
    'an example string' => 'newString2'
]);

您还可以使用方法by()->map()by()->mapIfExists()by()->mapDefault()。无论您需要什么:)