PHP preg_replace 正则表达式 - 顺序递增的替换数字

PHP preg_replace regex - sequentially increasing numbers in replacements

我正在尝试创建一个 preg_replace 模式来添加顺序增加的数字替换词。例如,我想改变这个:

"Mary had a little lamb"

对此:

"(:word_1:Mary:) (:word_2:had:) (:word_3:a:) (:word_4:little:) (:word_5:lamb:)"

最长的一行永远不会超过 16 个单词。我不认为这会是一个问题,除非我找不到任何关于顺序增加的数字。在经历了很多挫折之后,我考虑只编写一个表达式,使每行有 16 次单独(递归?)通过,但这似乎有点疯狂。任何帮助将不胜感激。

谢谢!

编辑:

基本上我只需要在字符串中的每个单词前加上“(:word_1:”、“(:word_2:”等,每个单词都递增。

这是您的解决方案。试试这个

<?php
$string = "Mary had a little lamb";
$count = 0;
$newstring = preg_replace_callback(
    '/\S+/',
    function($match) use (&$count) { return (( '(:word_' . $count++ . ':' .$match[0] . ':) ' )); },
    $string
    );
echo $newstring;
?>

PHP preg_replace_callback 函数匹配作为第一个参数给出的正则表达式模式和作为第三个参数给出的 $string。您还可以根据需要修改正则表达式模式以匹配所需的值。我还使用 $count 作为引用传递来获取匹配单词的计数。