我需要替换字符串中的一些文本。我认为一个例子可以更好地解释:
[myFile.json]
df.replace('.',np.nan)
[example.php]
{ "Dear":"newString1", "an example string":"newString2" }
因此,我需要在'@'符号之间找到任何字符串,对于找到的每个字符串,我都需要使用gimmeNewVal()函数进行替换。
我已经尝试过使用preg_ *函数,但使用正则表达式的能力却不是很强...
感谢您的帮助
答案 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);
答案 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()
。无论您需要什么:)