/**
  * Get a segment of a string based on a delimiter.
  * Use a negative index to start counting from the last element.
  *
  * @param string $string
  * @param string $delimiter
  * @param int    $index
  * @return string
  */
 function str_segment($string, $delimiter, $index)
 {
     return Str::segment($string, $delimiter, $index);
 }
     * @return string
     */
    Str::macro('firstSegment', function ($string, $delimiter) {
        return Str::segment($string, $delimiter, 1);
    });
}
if (!Str::hasMacro('lastSegment')) {
    /**
     * Get the last segment of a string based on a delimiter.
     *
     * @param string $string
     * @param string $delimiter
     * @return string
     */
    Str::macro('lastSegment', function ($string, $delimiter) {
        return Str::segment($string, $delimiter, -1);
    });
}
if (!Str::hasMacro('pop')) {
    /**
     * Pop off the last segment of a string based on a delimiter.
     * Returns the remaining string.
     *
     * @param string $string
     * @param string $delimiter
     * @return string
     */
    Str::macro('pop', function ($string, $delimiter) {
        return Str::replaceLast($delimiter . Str::lastSegment($string, $delimiter), '', $string);
    });
}
 public function test_str_segment()
 {
     $string = Str::segment('path/to/route', '/', 2);
     $this->assertEquals('to', $string);
     $string = Str::segment('path/to/route', '/', -1);
     $this->assertEquals('route', $string);
     $string = Str::segment('pathtoroute', '/', 2);
     $this->assertEquals('', $string);
     $string = Str::segment('path/to/route/', '/', 4);
     $this->assertEquals('', $string);
     $string = Str::segment('', '/', 2);
     $this->assertEquals('', $string);
 }