php 如何在正则表达式中查找文本并替换它[已关闭]

ct2axkht  于 2023-03-11  发布在  PHP
关注(0)|答案(1)|浏览(93)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

3天前关闭。
Improve this question
我想查找并替换此文本[token:math:1],其中最后一个数字是动态的,它可以是[token:math:2]
我尝试PHP preg_match_all('/[filter:([^]]+)]/'),但它似乎不工作.
这是我的PHP代码。

$text = "Hello world [token:math:1] today";
echo process($text);

    function process($text) {
     

      if (preg_match_all('/[token:math:\d+]/', $text, $matches, PREG_SET_ORDER)) {

        foreach ($matches as $match) {
          $replacements[$match[0]] = fn($matches[1]);
        }
        $new_text = str_replace(array_keys($replacements), array_values($replacements), $text);
      }

      return $new_text;
  }

function fn($match){

   return "test";
}
jtw3ybtb

jtw3ybtb1#

也许可以使用preg_replace_callback
这就是你想要的吗?

$text = "Hello world [token:math:1] today [token:math:15] tomorrow";

echo process($text);

function process($text) {
 

    $new_text = preg_replace_callback(
        '@(\[token\:math\:)(\d+)\]@',
        function ($match) {
            /* f.e. for "[token:math:1]": $match ===
                array (
                  0 => '[token:math:1]',
                  1 => '[token:math:',
                  2 => '1',
                )
            */
            return $match[1] . ($match[2]+1) . ']';
        },
        $text,
        -1,
        $count,
        PREG_SET_ORDER
    );

    return $new_text;
}

结果:

Hello world [token:math:2] today [token:math:16] tomorrow

相关问题