如何替换长文本中的所有特定字符串,这些字符串之间有动态数字?

fv2wmkja  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(296)

我试图替换包含特定字符串的字符串,该字符串之间包含一个动态数字。我尝试了preg_match_all,但它给了我空值
以下是我实际寻找的所有细节:
在我的长文本中,有一些值包含以下内容 [_wc_acof_(some dynamic number)] ,即:[[u wc\u acof\u 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_所有它给我空,我在下面尝试

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

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

brjng4g3

brjng4g31#

似乎您希望分阶段处理输入,首先获取特定词汇上下文中的所有数字,然后使用某种查找技术修改用户输入。
第一步可以按如下方式实现:

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

相关问题