PHP preg_replace第二次出现的字符

时间:2017-04-28 13:16:16

标签: php preg-replace

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

使用

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

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

<强>详情:

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

请参阅regex demo

仅在Boost / PCRE(以及最新版本的Onigmo)中支持的变体,也适用于您:

/»[^»]*\K»/

another regex demo\K将丢弃当前迭代中到目前为止匹配的所有文本。所以你只能在比赛中用你的替换字符串替换关闭的V形符号。