PHP替换:用不同的文本查找并替换相同的字符

PHP替换:用不同的文本查找并替换相同的字符,php,regex,preg-replace,str-replace,Php,Regex,Preg Replace,Str Replace,如何查找字符串中的相同字符并将其替换为两个不同的字符?即,对于整个字符串,第一次出现一个字符,第二次出现另一个字符 这就是我要做的(所以用户不需要在正文中键入html):我在这里使用了preg_replace,但我愿意使用其他任何东西 $str = $str = '>>Hello, this is code>> Here is some text >>This is more code>>'; $str = preg_replace('#[>

如何查找字符串中的相同字符并将其替换为两个不同的字符?即,对于整个字符串,第一次出现一个字符,第二次出现另一个字符

这就是我要做的(所以用户不需要在正文中键入html):我在这里使用了preg_replace,但我愿意使用其他任何东西

$str = $str = '>>Hello, this is code>> Here is some text >>This is more code>>';

$str = preg_replace('#[>>]+#','[code]',$str);

echo $str;

//output from the above
//[code]Hello, this is code[code] Here is some text [code]This is more code[code]

//expected output
//[code]Hello, this is code[/code] Here is some text [code]This is more code[/code]
但这里的问题是,两者都被替换为
[code]
。对于整个输出,是否可以将第一个
>
替换为
[code]
,将第二个
>
替换为
[/code]

php可以一次性完成这项工作吗?如何做到这一点

$str = '>>Hello, this is code>> Here is some text >>This is more code>>';
echo preg_replace( "#>>([^>]+)>>#", "[code]$1[/code]", $str );

如果您输入以下内容,上述操作将失败:

>这里是代码>打破>东西>>
要解决此问题,请使用负前瞻:

#>>((?!>[^>]).+?)>>#
这将是你的模式

echo preg_replace( "#>>((?!>[^>]).+?)>>#", "[code]$1[/code]", $str );

为什么不将
>>
用于
[code]
?@Justinas使新手用户更容易发布。你说得对。你的第二种模式处理得很好。在你发布答案后,我碰巧正在测试,但从未想过有用户在
>
字符串之间插入
。你能帮我做一件小事吗?我如何添加一些仅在有2个
>
而不是更多或更少的情况下才进行替换的内容。示例:
$str='>>您好,这是代码>>这里是一些文本>>>这是更多代码>>>;echo preg#u replace(“#>{2}((?!>[^>])。+?)>{2}{2}.”,“[code]$1[/code]”,$str)仅将字符串替换为
>
而不是
>>
。我添加了一个{2}我认为应该有效,但不起作用。