PHP替换:用不同的文本查找并替换相同的字符
如何查找字符串中的相同字符并将其替换为两个不同的字符?即,对于整个字符串,第一次出现一个字符,第二次出现另一个字符 这就是我要做的(所以用户不需要在正文中键入html):我在这里使用了preg_replace,但我愿意使用其他任何东西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('#[>
$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}我认为应该有效,但不起作用。