PHP preg_replace regex - 在替换中依次增加数字

时间:2017-09-26 12:39:16

标签: php regex preg-replace sequential

我试图创建一个preg_replace模式,以便在替换单词时添加顺序递增的数字。例如,我想改变这个:

"Mary had a little lamb"

到此:

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

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

谢谢!

编辑:

基本上我只需要在&#34;(:word_1:&#34;,&#34;(:word_2:&#34;等等)的字符串中添加每个单词,每个单词逐渐增加。< / p>

1 个答案:

答案 0 :(得分:1)

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

<?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作为参考传递来获得匹配单词的数量。