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

db2dz4w8  于 2023-01-19  发布在  PHP
关注(0)|答案(8)|浏览(143)

这是一些我可以拼凑起来的东西,但我想知道是否有人有一个干净的解决方案来解决我的问题。我拼凑起来的东西不一定非常简洁或快速!
我有一个像///hello/world///这样的字符串,我只需要去掉第一个和最后一个斜杠,其他的都不要,这样我就得到了一个像//hello/world//这样的字符串。
PHP的trim并不完全正确:执行trim($string, '/')将返回hello/world
需要注意的一点是字符串的开头或结尾不一定有斜线,下面是我希望不同字符串出现的一些例子:

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

提前感谢您的帮助!

eqoofvh9

eqoofvh91#

此函数用作正式微调,只是它只微调一次。

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
ef1yzkbh

ef1yzkbh2#

这个是最简单的,它匹配^/(正斜杠)和/$(正斜杠),如果找到其中一个,就用空字符串替换。只需将下面正则表达式中的/替换为您选择的字符。注意,对于分隔符,我使用#而不是/以使其更易于阅读。这将从字符串中删除任何单个的第一个或最后一个/:

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

结果:

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

lymnna713#

我想这就是你要找的:

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

rjee0c154#

使用反向引用的另一个正则表达式:

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

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

wko9yo5t

wko9yo5t5#

还有另一种实现方式:

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

fwzugrvs6#

这已经是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);
}
brvekthn

brvekthn7#

我写了这个代码来修剪一次字符

function trimOnce( $string, $characters ) {
    if ( ! is_string( $string ) || ! is_string( $characters ) )
        return $string;

    $stringLength     = mb_strlen( $string );
    $charactersLength = mb_strlen( $characters );

    if ( $charactersLength > $stringLength )
        return $string;

    if ( mb_substr( $string, 0, $charactersLength ) == $characters ) {
        $string       = mb_substr( $string, $charactersLength, $stringLength );
        $stringLength = mb_strlen( $string );
    }

    if ( mb_substr( $string, - 1 * $charactersLength ) == $characters )
        $string = mb_substr( $string, 0, $stringLength - $charactersLength );

    return $string;
}

echo trimOnce( trimOnce( '<div><div>test</div></div>', '<div>' ), '</div>' );
wgmfuz8q

wgmfuz8q8#

我首先想到的是:

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

相关问题