php - 如何替换长文本中具有动态数字的所有特定字符串?

标签 php regex preg-replace preg-match-all

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

这是我实际正在寻找的所有详细信息:

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

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

我想运行这个逻辑:

1- 首先,我获取 [_wc_acof_ 之后的所有数字,并按照此处的指导使用 preg_match_all 将它们保存在数组中 get number after string 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);

But i am unable to get preg_match_all it gives me NULL where i tried below

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 demo :

<?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

关于php - 如何替换长文本中具有动态数字的所有特定字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68533264/

相关文章:

Php - 单击哪个按钮

没有整数的PHP mysql更新

php - 重置 cs 购物车管理员密码

php - 10 到 15 条 XMPP 消息后出现错误 503

regex - 我可以在 bash shell 脚本中使用正则表达式吗

regex - Haskell 中的 PCRE - 什么,在哪里,如何?

来自变量的 Ruby 正则表达式

php - 删除图像的包装标签

php - 如果满足特定条件,则使用正则表达式添加 CSS 条件

php - Nginx、PHP + FPM 自定义错误页面