PHP preg_replace 字符第二次出现

PHP preg_replace second occurence of character

如何调整下面的代码以使用 preg_replace 替换第二个 » 字符?

$out = 'Home » Food » Fruit';
$out = preg_replace('/»/', 'Category:', $out, 1);

提前致谢!

要仅删除字符串的第二次出现,您需要匹配第一个,然后匹配 并捕获 直到第二个的所有文本,然后替换为反向引用。

使用

$out = 'Home » Food » Fruit';
$out = preg_replace('/(»[^»]*)»/', 'Category:', $out, 1);
echo $out;

PHP demo。最后一个 $limit 参数将 preg_replace 仅替换第一个匹配项。

详情:

  • (»[^»]*) - 捕获第 1 组匹配
    • » - 文字 »
    • [^»]* - »
    • 以外的任何字符出现 0+ 次(由于 * 量词)
  • » - 文字 »

参见regex demo

仅 Boost/PCRE(和最新版本的 Onigmo)支持的变体也适用于您:

/»[^»]*\K»/

参见 another regex demo\K 将丢弃当前迭代中到目前为止匹配的所有文本。所以你只会用你的替换字符串替换匹配中的结束 V 形。