我怎么能取代所有特定的字符串在一个长文本之间有动态数字?



我正在尝试替换包含特定字符串的字符串,其中包括之间的动态数字。我尝试了preg_match_all但是它给了我NULL

这是我实际上正在寻找的所有细节:

在我的长文本中有包含此[_wc_acof_(some dynamic number)]的值,即:[_wc_acof_6]我想将它们转换为$postmeta['_wc_acof_14'][0]

在同一长文本中可以有多个

我想通过这个逻辑:

1-首先我得到[_wc_acof_之后的所有数字,并使用preg_match_all将它们保存在数组中在这里得到字符串后的数字PHP regex

2-然后我运行一个foreach循环并设置我的数组模式替换与该数字,即:

foreach ($allMatchNumbers as $MatchNumber){
$key = "[_wc_acof_" . $MatchNumber. "]";
$patterns[] = $key;
$replacements[] = $postmeta[$key][0];
}

3-然后我用这个echo preg_replace($patterns, $replacements, $string);代替

但是我无法得到preg_match_all它给我NULL

preg_match_all('/[_wc_acof_/',$string,$allMatchNumbers );

请帮忙吗?我不确定preg_grep是否比这更好?

您似乎希望分阶段处理输入,首先获得特定词法上下文中的所有数字,然后使用某种查找技术修改用户输入。

第一步可以实现为

preg_match_all('~[_wc_acof_(d+)]~', $text, $matches)

[_wc_acof_]之间的一个或多个数字的序列提取到组1(您可以通过$matches[1]访问这些值)。

然后,您可以使用这些值填充$replacements数组。

接下来,您可以使用

preg_replace_callback('~[_wc_acof_(d+)]~', function($m) use ($replacements){
return $replacements[$m[1]];
}, $text)

查看PHP演示:

<?php
$text = '<p>[_wc_acof_6] i want to convert this and it contains also this [_wc_acof_9] or can be this [_wc_acof_11] number can never be static</p>';
if (preg_match_all('~[_wc_acof_(d+)]~', $text, $matches)) {
foreach($matches[1] as $matched){
$replacements[$matched] = 'NEW_VALUE_FOR_'.$matched.'_KEY';        
}
print_r($replacements);
echo preg_replace_callback('~[_wc_acof_(d+)]~', function($m) use ($replacements){
return $replacements[$m[1]];
}, $text);
}

输出:

Array
(
[0] => 6
[1] => 9
[2] => 11
)
NEW_VALUE_FOR_6_KEY i want to convert this and it contains also this NEW_VALUE_FOR_9_KEY or can be this NEW_VALUE_FOR_11_KEY number can never be static

相关内容

最新更新