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

时间:2015-09-30 11:02:50

标签: php regex string

我正在尝试使用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);  
} 
?>

2 个答案:

答案 0 :(得分:1)

您不需要正则表达式:

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

答案 1 :(得分:1)

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

$foo = 'First Text &raquo; Second text &raquo; Third text &raquo; Maybe Forth text &raquo; ' ;
echo preg_replace('/^(.*)(?:&raquo;.*){2}/', '$1', $foo);  

在这里,第一个.*优先,消耗尽可能多(贪婪)。

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