仅修剪字符串中第一个和最后一个字符(PHP)

时间:2010-09-30 19:56:01

标签: php string trim

这是我可以合并的东西,但我想知道是否有人对我的问题有一个干净的解决方案。我扔在一起的东西不一定非常简洁或快速!

我有一个像///hello/world///这样的字符串。我只需删除第一个和最后一个斜杠,而不是其他斜杠,这样我就得到一个像//hello/world//这样的字符串。

PHP的trim不是很正确:执行trim($string, '/')会返回hello/world

需要注意的一点是,字符串在开头或结尾不一定有任何斜杠。以下是我希望在不同字符串中发生的一些示例:

///hello/world/// > //hello/world//
/hello/world/// > hello/world//
hello/world/ > hello/world

提前感谢您的帮助!

7 个答案:

答案 0 :(得分:8)

我首先想到的是:

if ($string[0] == '/') $string = substr($string,1);
if ($string[strlen($string)-1] == '/') $string = substr($string,0,strlen($string)-1);

答案 1 :(得分:0)

我认为这就是你在寻找的东西:

preg_replace('/\/(\/*[^\/]*?\/*)\//', '\1', $text);

答案 2 :(得分:0)

使用反向引用的不同正则表达式:

preg_replace('/^(\/?)(.*)\1$/','\2',$text);

这样做的好处是,如果您想使用/以外的字符,您可以更清晰地使用。它还强制/字符开始和结束字符串,并允许/出现在字符串中。最后,如果最后还有一个字符,它只会从头开始删除字符,反之亦然。

答案 3 :(得分:0)

又一个实施:

function otrim($str, $charlist)
{
 return preg_replace(sprintf('~^%s|%s$~', preg_quote($charlist, '~')), '', $str);
}

答案 4 :(得分:0)

它已经超过6年了,但我还是可以回答:

function trimOnce($value)
{   
    $offset = 0;
    $length = null;
    if(mb_substr($value,0,1) === '/') {
        $offset = 1;
    }
    if(mb_substr($value,-1) === '/') {
       $length = -1;
    }
    return mb_substr($value,$offset,$length);
}

答案 5 :(得分:0)

此功能充当正式修剪,只是仅修剪一次。

function trim_once($text, $c) {
    $c = preg_quote($c);
    return preg_replace("#^([$c])?(.*?)([$c])?$#", '$2', $text);
}
php > echo trim_once("||1|2|3|*", "*|");
|1|2|3|
php > echo trim_once("//|1|2|3/", "/");
/|1|2|3

答案 6 :(得分:0)

到目前为止,这是最简单的。它与^ /(开始斜杠)和/ $(结束斜杠)匹配,如果找到任何一个,则将其替换为空字符串。这适用于任何角色;只需将以下正则表达式中的/替换为您选择的字符即可。请注意,对于定界符,我使用#代替/使其更易于阅读。这将从字符串中删除任何单个的first或last /:

$trimmed = preg_replace('#(^/|/$)#', '', $string);

结果:

///hello/world/// > //hello/world//
/hello/world/// > hello/world//
hello/world/ > hello/world