development

PHP 부분 문자열 추출.

big-blog 2020. 6. 8. 07:57
반응형

PHP 부분 문자열 추출. 첫 번째 '/'또는 전체 문자열 앞에 문자열을 가져옵니다.


하위 문자열을 추출하려고합니다. PHP에서 도움이 필요합니다.

다음은 작업중 인 샘플 문자열과 필요한 결과입니다.

home/cat1/subcat2 => home

test/cat2 => test

startpage => startpage

첫 번째까지 문자열을 얻고 /싶지만 존재하지 않으면 /전체 문자열을 가져옵니다.

나는 시도했다

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

나는 그것이 위치라고 생각하고 /위치 0에서 위치로 부분 문자열을 얻는다 .

/문을 너무 크게 만들지 않고 no가있는 경우를 처리하는 방법을 모르겠습니다 .

PHP 문장을 너무 복잡하게 만들지 않고 그 경우를 처리하는 방법이 있습니까?


사용하다 explode()

$arr = explode("/", $string, 2);
$first = $arr[0];

이 경우, php가 필요한 것보다 더 이상 문자열을 스캔하지 않도록 limit매개 변수를 사용하고 explode있습니다.


가장 효율적인 솔루션은입니다 strtok기능 :

strtok($mystring, '/')

예를 들면 다음과 같습니다.

$mystring = 'home/cat1/subcat2/';
$first = strtok($mystring, '/');
echo $first; // home

$mystring = 'home';
$first = strtok($mystring, '/');
echo $first; // home

$first = explode("/", $string)[0];

이건 어때?

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

mystring 끝에 '/'를 추가하면 최소한 하나 이상이 있는지 확인할 수 있습니다.)


이것은 아마도 내 생각에 가장 짧은 예일 것입니다.

list($first) = explode("/", $mystring);

1) 구분 기호를 찾을 list()때까지 자동으로 문자열을 할당합니다. 2) "/"구분 기호를 찾지
못하면 "/"전체 문자열이 할당됩니다.

... 실제로 성능에 사로 잡히면 추가 매개 변수를 추가하여 분해 할 수 explode("/", $mystring, 2)있는 최대 요소를 제한 할 수 있습니다 .


허용되는 답변의 한 줄 버전 :

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

PHP 5.4 이상에서 작동


늦어도 안 하는것 보단 낫다. php에는 미리 정의 된 기능이 있습니다. 여기 좋은 방법이 있습니다.

strstr

일치하기 전에 부품을 얻으려면 before_needle (3 번째 매개 변수)을 http://php.net/manual/en/function.strstr.php 로 설정 true 하십시오.

function not_strtok($string, $delimiter)
{    
    $buffer = strstr($string, $delimiter, true);

    if (false === $buffer) {
        return $string;
    }

    return $buffer;
}

var_dump(
    not_strtok('st/art/page', '/')
);

PHP 5.3의 strstr () 함수가이 작업을 수행해야합니다. 그러나 세 번째 매개 변수는 true로 설정되어야합니다.

그러나 5.3을 사용하지 않으면 아래 기능이 정확하게 작동합니다.

function strbstr( $str, $char, $start=0 ){
    if ( isset($str[ $start ]) && $str[$start]!=$char ){
        return $str[$start].strbstr( $str, $char, $start+1 );
    }
}

나는 그것을 테스트하지는 않았지만 이것은 잘 작동해야합니다. 그리고 그것은 매우 빠릅니다.


이를 처리하는 도우미 함수를 만들 수 있습니다.

/**
 * Return string before needle if it exists.
 *
 * @param string $str
 * @param mixed $needle
 * @return string
 */
function str_before($str, $needle)
{
    $pos = strpos($str, $needle);

    return ($pos !== false) ? substr($str, 0, $pos) : $str;
}

사용 사례는 다음과 같습니다.

$sing = 'My name is Luka. I live on the second floor.';

echo str_before($sing, '.'); // My name is Luka

currenton explode사용 하면 프로세스가 쉬워집니다.

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

다음과 같은 정규식을 사용해보십시오.

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

sometimes, regex are slower though, so if performance is an issue, make sure to benchmark this properly and use an other alternative with substrings if it's more suitable for you.


$string="kalion/home/public_html";

$newstring=( stristr($string,"/")==FALSE ) ? $string : substr($string,0,stripos($string,"/"));

I think this should work?

substr($mystring, 0, (($pos = (strpos($mystring, '/') !== false)) ? $pos : strlen($mystring)));

why not use:

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);
   }

참고URL : https://stackoverflow.com/questions/1935918/php-substring-extraction-get-the-string-before-the-first-or-the-whole-strin

반응형