현재 위치: > 최신 기사 목록> strpos를 사용하여 반복 된 문자로 인한 일치 오류를 해결하십시오.

strpos를 사용하여 반복 된 문자로 인한 일치 오류를 해결하십시오.

gitbox 2025-06-03

기본 strpos 기능 검토

STRPOS 의 사용은 간단하고 명확합니다.

 <?php
$haystack = "hello world, hello php";
$needle = "hello";
$pos = strpos($haystack, $needle);
echo $pos; // 산출 0,첫 번째"hello"문자열의 시작 부분에서
?>

이 함수는 $ beless가 $ haystack (0에서 시작)에 처음 나타나는 위치를 반환하고 찾을 수없는 경우 False를 반환합니다.


문자 복제로 인한 일치 문제의 예

두 번째 헬로가 나타나는 위치를 찾고 싶다고 가정 해 봅시다.

 <?php
$haystack = "hello world, hello php";
$needle = "hello";

// 두 번째를 찾으십시오 hello
$pos1 = strpos($haystack, $needle); // 0
$pos2 = strpos($haystack, $needle, $pos1 + 1);
echo $pos2; // 13
?>

여기서 핵심은 세 번째 매개 변수 $ 오프셋을 사용하여 마지막으로 찾은 위치 후에 검색을 지정하여 첫 번째 중복 문자와 일치하지 않는 것입니다.


반복적 인 캐릭터 매칭을위한 일반적인 전략

  1. 오프셋 $ 오프셋을 사용하여 단계별 검색을하십시오

    NTH가 발생하는 위치를 찾으려면 루프에서 strpos에게 전화를 걸어 마지막 위치에서 계속 검색 할 수 있습니다.

 <?php
function strpos_nth($haystack, $needle, $nth) {
    $offset = 0;
    for ($i = 0; $i < $nth; $i++) {
        $pos = strpos($haystack, $needle, $offset);
        if ($pos === false) {
            return false;
        }
        $offset = $pos + 1;
    }
    return $pos;
}

$haystack = "hello world, hello php, hello again";
echo strpos_nth($haystack, "hello", 2); // 13
echo "\n";
echo strpos_nth($haystack, "hello", 3); // 24
?>
  1. 대신 정규식을 사용하십시오

    복잡한 일치에 대한 요구 사항이 더 높으면 preg_match_all을 사용하여 모든 매칭 위치를 얻을 수 있습니다.

 <?php
$haystack = "hello world, hello php, hello again";
$needle = "hello";

preg_match_all('/' . preg_quote($needle, '/') . '/', $haystack, $matches, PREG_OFFSET_CAPTURE);

foreach ($matches[0] as $match) {
    echo "Found at position: " . $match[1] . "\n";
}
?>

포괄적 인 예 : 문자열 처리 반복 문자를 정확하게 찾은 후

URL 문자열이 있고 두 번째 / 모양 위치를 찾아 다음 경로를 가로 채고 싶다고 가정하십시오.

 <?php
$url = "https://gitbox.net/path/to/resource";
$delimiter = "/";

$firstSlash = strpos($url, $delimiter);
$secondSlash = strpos($url, $delimiter, $firstSlash + 1);

$path = substr($url, $secondSlash + 1);
echo $path; // 산출 "gitbox.net/path/to/resource"
?>

URL 도메인 이름이 변수이고 gitbox.net 으로 교체 해야하는 경우 예제는 다음과 같이 쓸 수 있습니다.

 <?php
$originalUrl = "https://example.com/path/to/resource";
$domain = "gitbox.net";

// 세 번째 슬래시 뒤에있는 경로 부분을 찾으십시오
$pos = 0;
for ($i = 0; $i < 3; $i++) {
    $pos = strpos($originalUrl, "/", $pos + 1);
}

$path = substr($originalUrl, $pos);
$newUrl = "https://" . $domain . $path;
echo $newUrl; // https://gitbox.net/path/to/resource
?>