Php 需要从结尾(向后)修剪字符串,直到表达式的第二次出现

Php 需要从结尾(向后)修剪字符串,直到表达式的第二次出现,php,regex,string,Php,Regex,String,我正在尝试使用PHP制作面包屑。(我见过一些交钥匙解决方案,但它们并不完全符合我的需要) 我需要从末端(向后)修剪字符串,直到第二次出现»。我尝试过贪婪/懒惰的表达方式,不同组合的量词,但都是徒劳的。字符串要么保持未修剪状态,要么一直剪切到»的最后一次出现(从末尾开始计数)。需要你的帮助 这一次修剪到最后一次出现: <?php $foo = 'First Text &raquo; Second text &raquo; Third text &raquo; May

我正在尝试使用PHP制作面包屑。(我见过一些交钥匙解决方案,但它们并不完全符合我的需要) 我需要从末端(向后)修剪字符串,直到第二次出现»。我尝试过贪婪/懒惰的表达方式,不同组合的量词,但都是徒劳的。字符串要么保持未修剪状态,要么一直剪切到»的最后一次出现(从末尾开始计数)。需要你的帮助

这一次修剪到最后一次出现:

<?php 
$foo = 'First Text &raquo; Second text &raquo; Third text &raquo; Maybe Forth text &raquo; ' ;
if ($thisFolder == "index"){
echo preg_replace('/(&raquo;(.+?)&raquo;)? $/', '', $foo);  
} 
?>

您不需要正则表达式:

$parts = explode('&raquo;', $foo);
$result = implode('&raquo;', array_slice($parts, 0, -2));

最简单的方法是匹配整行并将第一部分用作
$replacement

$foo = 'First Text &raquo; Second text &raquo; Third text &raquo; Maybe Forth text &raquo; ' ;
echo preg_replace('/^(.*)(?:&raquo;.*){2}/', '$1', $foo);  
在这里,第一个
*
优先,消耗尽可能多(贪婪)


$1
反向引用第一组匹配的零件,用作替换。

谢谢,Mariano。如果我只留下第一个文本,代码就可以工作,它也会被修剪,但在我的情况下,这并不重要。很高兴它能为你工作。如果没有至少2个
,则不会修剪在文本中。。。记住regex总是比较慢,@casimirethippolyte的答案应该快约40%,如果这对你现在来说很重要的话,并且如果没有2个分隔符,它会修剪整个文本。谢谢,casimirethippolyte。你的代码对我来说非常好,与使用regex的代码不同,它不会删除第一个文本。