我试图提取一个子字符串。我需要一些帮助,在PHP做它。

以下是我正在使用的一些示例字符串和我需要的结果:

home/cat1/subcat2 => home

test/cat2 => test

startpage => startpage

我想获取第一个/之前的字符串,但如果没有/,则获取整个字符串。

我试过了,

substr($mystring, 0, strpos($mystring, '/'))

我想它说的是-获取/的位置然后获取从0到那个位置的子字符串。

我不知道如何处理没有/的情况,而不使声明太大。

有没有一种方法来处理这种情况,也不使PHP语句过于复杂?


当前回答

你可以尝试使用这样的正则表达式:

$s = preg_replace('|/.*$|', '', $s);

有时候,正则表达式比较慢,所以如果性能是一个问题,请确保正确地进行基准测试,如果更适合您,请使用其他带有子字符串的替代方法。

其他回答

公认答案的单行版本:

$out=explode("/", $mystring, 2)[0];

应该工作在php 5.4+

那么这个呢:

substr($mystring.'/', 0, strpos($mystring, '/'))

简单地添加一个'/'到mystring的末尾,这样你就可以确保至少有一个;)

为什么不使用:

function getwhatiwant($s)
{
    $delimiter='/';
    $x=strstr($s,$delimiter,true);
    return ($x?$x:$s);
}

OR:

   function getwhatiwant($s)
   {
       $delimiter='/';
       $t=explode($delimiter, $s);
       return ($t[1]?$t[0]:$s);
   }

在爆炸上使用电流可以简化这个过程。

 $str = current(explode("/", $str, 2));

你可以尝试使用这样的正则表达式:

$s = preg_replace('|/.*$|', '', $s);

有时候,正则表达式比较慢,所以如果性能是一个问题,请确保正确地进行基准测试,如果更适合您,请使用其他带有子字符串的替代方法。