我试图创建一个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>
答案 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作为参考传递来获得匹配单词的数量。