[php] PHP에서 두 문자열 사이에 부분 문자열을 얻는 방법은 무엇입니까?

두 단어 (또는 두 문자) 사이의 하위 문자열을 반환하는 함수가 필요합니다. 그것을 달성하는 PHP 함수가 있는지 궁금합니다. 정규식에 대해 생각하고 싶지 않습니다 (글쎄, 나는 할 수는 있지만 실제로 가장 좋은 방법이라고 생각하지는 않습니다). 사고 strpossubstr기능. 예를 들면 다음과 같습니다.

$string = "foo I wanna a cake foo";

우리는 함수를 호출한다 $substring = getInnerSubstring($string,"foo");
: “나는 케이크를 원한다”.

미리 감사드립니다.

업데이트 :
지금까지 하나의 문자열로 두 단어로 된 하위 문자열 만 얻을 수 있습니다. 좀 더 멀리 갈 수있게하고 허용 getInnerSubstring($str,$delim)값 사이에있는 문자열을 얻는 용도를 확장 할 수 있는지 묻고 , 예:

$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero  foo";

같은 배열을 얻습니다 {"I like php", "I also like asp", "I feel hero"}.



답변

문자열이 다른 경우 (예 : [foo] & [/ foo]) Justin Cook 의이 게시물 을 살펴보십시오 . 아래 코드를 복사합니다.

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');

echo $parsed; // (result = dog)


답변

정규 표현식은 다음과 같은 방법입니다.

$str = 'before-str-after';
if (preg_match('/before-(.*?)-after/', $str, $match) == 1) {
    echo $match[1];
}

온라인 Php


답변

function getBetween($string, $start = "", $end = ""){
    if (strpos($string, $start)) { // required if $start not exist in $string
        $startCharCount = strpos($string, $start) + strlen($start);
        $firstSubStr = substr($string, $startCharCount, strlen($string));
        $endCharCount = strpos($firstSubStr, $end);
        if ($endCharCount == 0) {
            $endCharCount = strlen($firstSubStr);
        }
        return substr($firstSubStr, 0, $endCharCount);
    } else {
        return '';
    }
}

샘플 사용 :

echo getBetween("abc","a","c"); // returns: 'b'

echo getBetween("hello","h","o"); // returns: 'ell'

echo getBetween("World","a","r"); // returns: ''


답변

function getInnerSubstring($string,$delim){
    // "foo a foo" becomes: array(""," a ","")
    $string = explode($delim, $string, 3); // also, we only need 2 items at most
    // we check whether the 2nd is set and return it, otherwise we return an empty string
    return isset($string[1]) ? $string[1] : '';
}

사용 예 :

var_dump(getInnerSubstring('foo Hello world foo','foo'));
// prints: string(13) " Hello world "

주변 공백을 제거하려면을 사용하십시오 trim. 예:

var_dump(trim(getInnerSubstring('foo Hello world foo','foo')));
// prints: string(11) "Hello world"


답변

function getInbetweenStrings($start, $end, $str){
    $matches = array();
    $regex = "/$start([a-zA-Z0-9_]*)$end/";
    preg_match_all($regex, $str, $matches);
    return $matches[1];
}

예를 들어 다음 예제에서 @@ 사이에 문자열 (키) 배열을 원합니다. 여기서 ‘/’는 중간에 없습니다.

$str = "C://@@ad_custom_attr1@@/@@upn@@/@@samaccountname@@";
$str_arr = getInbetweenStrings('@@', '@@', $str);

print_r($str_arr);


답변

strstr PHP 함수를 두 번 사용하십시오.

$value = "This is a great day to be alive";
$value = strstr($value, "is"); //gets all text from needle on
$value = strstr($value, "be", true); //gets all text before needle
echo $value;

출력 :
"is a great day to"


답변

나는 정규식 솔루션을 좋아하지만 다른 어느 것도 나에게 적합하지 않습니다.

결과가 1 개만 있다는 것을 알고 있다면 다음을 사용할 수 있습니다.

$between = preg_replace('/(.*)BEFORE(.*)AFTER(.*)/sm', '\2', $string);

BEFORE 및 AFTER를 원하는 분리 문자로 변경하십시오.

또한이 함수는 일치하지 않는 경우 전체 문자열을 반환합니다.

이 솔루션은 여러 줄로 구성되어 있지만 필요에 따라 수정자를 사용할 수 있습니다.