public function test_str_firstSegment()
 {
     $string = Str::firstSegment('path/to/route', '/');
     $this->assertEquals('path', $string);
     $string = Str::firstSegment('pathtoroute', '/');
     $this->assertEquals('pathtoroute', $string);
     $string = Str::firstSegment('/path/to/route', '/');
     $this->assertEquals('', $string);
     $string = Str::firstSegment('', '/');
     $this->assertEquals('', $string);
 }
     * @param string $string
     * @param string $delimiter
     * @param int    $nth
     * @return string
     */
    Str::macro('segment', function ($string, $delimiter, $nth) {
        $segments = explode($delimiter, $string);
        if ($nth < 0) {
            $segments = array_reverse($segments);
            $nth = abs($nth) - 1;
        } elseif ($nth == 0) {
            $nth++;
        } else {
            $nth--;
        }
        return isset($segments[$nth]) ? $segments[$nth] : '';
    });
}
if (!Str::hasMacro('shift')) {
    /**
     * Shift off the first segment of a string based on a delimiter.
     * Returns the remaining string.
     *
     * @param string $string
     * @param string $delimiter
     * @return string
     */
    Str::macro('shift', function ($string, $delimiter) {
        return Str::replaceFirst(Str::firstSegment($string, $delimiter) . $delimiter, '', $string);
    });
}
 /**
  * Get the first segment of a string based on a delimiter.
  *
  * @param string $string
  * @param string $delimiter
  * @return string
  */
 function str_firstSegment($string, $delimiter)
 {
     return Str::firstSegment($string, $delimiter);
 }