这是我可以合并的东西,但我想知道是否有人对我的问题有一个干净的解决方案。我扔在一起的东西不一定非常简洁或快速!
我有一个像///hello/world///
这样的字符串。我只需删除第一个和最后一个斜杠,而不是其他斜杠,这样我就得到一个像//hello/world//
这样的字符串。
PHP的trim
不是很正确:执行trim($string, '/')
会返回hello/world
。
需要注意的一点是,字符串在开头或结尾不一定有任何斜杠。以下是我希望在不同字符串中发生的一些示例:
///hello/world/// > //hello/world//
/hello/world/// > hello/world//
hello/world/ > hello/world
提前感谢您的帮助!
答案 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