PHP에서 stripos 함수는 일반적으로 문자열이 다른 문자열에서 먼저 나타나는 위치를 찾는 데 사용되며, 대소 문자에 민감합니다. 문자열에서 전역 검색을 수행하려면 Stripos는 직접 지원되는 기능이 아닙니다. 첫 번째 발생 위치 만 반환합니다.
그렇다면 글로벌 검색을 구현하기 위해 Stripos를 어떻게 시뮬레이션해야합니까? 이 기사는이 문제를 탐색하고 유사한 기능을 구현하기위한 몇 가지 대안을 제공합니다.
글로벌 검색을 시뮬레이션하기 위해 전체 문자열이 검색 될 때까지 다음 일치 위치를 지속적으로 찾아 Stripos 와 Substr을 사용하여 결합 할 수 있습니다.
다음은 글로벌 검색을 시뮬레이션하는 코드 예입니다.
<?php
function globalStripos($haystack, $needle) {
$offset = 0; // 문자열의 시작 위치에서 검색을 시작하십시오
$matches = []; // 모든 일치하는 위치를 저장하는 데 사용됩니다
while (($pos = stripos($haystack, $needle, $offset)) !== false) {
$matches[] = $pos;
$offset = $pos + 1; // 현재 위치의 다음 캐릭터에서 계속 검색
}
return $matches;
}
$text = "This is a test string. Let's test stripos function.";
$needle = "test";
$result = globalStripos($text, $needle);
print_r($result); // 모든 일치하는 위치를 출력합니다
?>
이 예에서 GlobalStripos 함수는 stripos를 사용하여 각 일치의 위치를 찾아 오프셋 매개 변수를 조정하여 마지막 일치하는 위치의 다음 문자에서 시작할 때마다 모든 일치하는 위치를 배열 및 반환에 저장합니다.
클리너 솔루션을 사용하려면 정규 표현식의 preg_match_all 기능을 사용하는 것을 고려하십시오. 이 기능은 모든 일치의 위치 정보를 반환하고보다 복잡한 일치를 허용합니다.
다음은 preg_match_all을 사용하여 글로벌 검색을 구현하기위한 샘플 코드입니다.
<?php
function globalSearchWithPreg($haystack, $needle) {
$pattern = '/' . preg_quote($needle, '/') . '/i'; // 정규 표현식 사용,'i' 플래그는 사례 둔감을 나타냅니다
preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE);
$positions = [];
foreach ($matches[0] as $match) {
$positions[] = $match[1]; // 일치하는 위치를 얻으십시오
}
return $positions;
}
$text = "This is a test string. Let's test preg_match_all function.";
$needle = "test";
$result = globalSearchWithPreg($text, $needle);
print_r($result); // 모든 일치하는 위치를 출력합니다
?>
이 예에서 preg_match_all은 모든 일치하는 배열을 반환합니다. preg_offset_capture 매개 변수를 통해 preg_match_all은 일치의 위치 정보를 반환하고 이러한 위치를 추출하여 반환 할 수 있습니다.
정규 표현식을 사용하고 싶지 않다면 STRSTR 또는 STRPO는 실용적인 대안입니다. 이러한 기능은 기본적으로 첫 번째 발생을 찾는 데 기본적으로 이루어 지지만 검색 시작점을 조정하여 글로벌 검색을 시뮬레이션 할 수도 있습니다.
다음은 strstr을 사용하는 예입니다.
<?php
function globalSearchWithStrstr($haystack, $needle) {
$offset = 0;
$matches = [];
while (($pos = strstr(substr($haystack, $offset), $needle)) !== false) {
$matches[] = $pos;
$offset += strlen($pos) - strlen($needle) + 1; // 다음 위치에서 계속 검색하십시오
}
return $matches;
}
$text = "This is a test string. Let's test strstr function.";
$needle = "test";
$result = globalSearchWithStrstr($text, $needle);
print_r($result); // 모든 일치하는 하위 문자열을 출력합니다
?>
이 방법은 strstr을 사용하여 이전 Stripos 시뮬레이션과 유사한 각 경기를 찾습니다.
StripoS를 시뮬레이션하여 Stripos 와 Substr 과 결합, preg_match_all을 사용하여 정기적 인 매칭을 사용하거나 STRSTR 및 기타 기능을 사용하는 등 전역 검색 기능을 구현하는 방법에는 여러 가지가 있습니다. 각 방법에는 장점과 단점이 있으며 시나리오에 맞는 솔루션을 선택하는 것이 매우 중요합니다. 보다 복잡한 일치 로직 또는 유연한 패턴 일치가 필요한 경우 일반 표현식을 사용하는 것이 일반적으로 최선의 선택입니다.