Php 需要从结尾(向后)修剪字符串,直到表达式的第二次出现
我正在尝试使用PHP制作面包屑。(我见过一些交钥匙解决方案,但它们并不完全符合我的需要) 我需要从末端(向后)修剪字符串,直到第二次出现»。我尝试过贪婪/懒惰的表达方式,不同组合的量词,但都是徒劳的。字符串要么保持未修剪状态,要么一直剪切到»的最后一次出现(从末尾开始计数)。需要你的帮助 这一次修剪到最后一次出现:Php 需要从结尾(向后)修剪字符串,直到表达式的第二次出现,php,regex,string,Php,Regex,String,我正在尝试使用PHP制作面包屑。(我见过一些交钥匙解决方案,但它们并不完全符合我的需要) 我需要从末端(向后)修剪字符串,直到第二次出现»。我尝试过贪婪/懒惰的表达方式,不同组合的量词,但都是徒劳的。字符串要么保持未修剪状态,要么一直剪切到»的最后一次出现(从末尾开始计数)。需要你的帮助 这一次修剪到最后一次出现: <?php $foo = 'First Text » Second text » Third text » May
<?php
$foo = 'First Text » Second text » Third text » Maybe Forth text » ' ;
if ($thisFolder == "index"){
echo preg_replace('/(»(.+?)»)? $/', '', $foo);
}
?>
您不需要正则表达式:
$parts = explode('»', $foo);
$result = implode('»', array_slice($parts, 0, -2));
最简单的方法是匹配整行并将第一部分用作
$replacement
$foo = 'First Text » Second text » Third text » Maybe Forth text » ' ;
echo preg_replace('/^(.*)(?:».*){2}/', '$1', $foo);
在这里,第一个*
优先,消耗尽可能多(贪婪)
$1
反向引用第一组匹配的零件,用作替换。谢谢,Mariano。如果我只留下第一个文本,代码就可以工作,它也会被修剪,但在我的情况下,这并不重要。很高兴它能为你工作。如果没有至少2个,则不会修剪代码>在文本中。。。记住regex总是比较慢,@casimirethippolyte的答案应该快约40%,如果这对你现在来说很重要的话,并且如果没有2个分隔符,它会修剪整个文本。谢谢,casimirethippolyte。你的代码对我来说非常好,与使用regex的代码不同,它不会删除第一个文本。