strpos()
함수 사용법
strpos()
함수는
문자열에서 특정 문자열의 위치를 찾는 함수입니다.
대상 문자열에서 주어진 문자열이 처음 나타나는 위치(인덱스)를 반환합니다. 주어진 문자열이 포함되어 있지 않으면 false
를 반환합니다.
대소문자를 구분합니다.
$str = 'Hello, World!';
$substring = 'World';
$pos = strpos($str, $substring);
if ($pos !== false) {
echo "찾은 위치: $pos";
} else {
echo '찾을 수 없습니다.';
}
// 출력: 찾은 위치: 7
/*
* 주의하세요!
* 문자열에서 인덱스는 0부터 시작합니다.
* 첫 번째 문자열의 인덱스는 0이고, 두 번째 문자열의 인덱스는 1입니다.
*/
strpos()
함수는 대소문자를 구분해서 문자열에 특정 문자가 포함되어 있는지를 확인하는데 매우 유용합니다.
참고로, PHP 8에서 도입된 str_contains()
함수는 대소문자를 구분해서 문자열에 주어진 문자가 포함되어 있으면 true
를 그렇지 않으면 false
를 반환합니다.
strpos()
함수의 형식은 다음과 같습니다.
구문
strpos(string $haystack, string $needle, int $offset = 0): int|false
매개변수
$haystack |
검색 대상이 되는 문자열입니다. |
---|---|
$needle |
검색할 문자열입니다.
|
$offset |
옵션. 검색을 시작할 0 기반의 인덱스입니다.
|
반환 값
대상 문자열에서 주어진 문자열($needle
)이 처음 나타나는 위치(인덱스)를 반환합니다.
문자열 위치(인덱스)는 1
이 아닌 0
부터 시작한다는 점에 유의하세요.
주어진 문자열($needle
)이 포함되어 있지 않으면 false
를 반환합니다.
주의할 점
strpos()
함수는 대소문자를 구분합니다.
strpos()
함수는 대소문자를 구분합니다.
$str = 'Hello, World!';
$substring = 'world';
$pos = strpos($str, $substring);
if ($pos === false) {
echo "대소문자가 일치하지 않아 'world!'를 찾을 수 없습니다.";
} else {
echo "문자열에 'world!'가 포함되어 있습니다.";
}
// 출력: "대소문자가 일치하지 않아 'world!'를 찾을 수 없습니다."
만약 대소문자를 구분하지 않고 문자열에서 특정 문자열의 위치를 찾고자 한다면, stripos()
함수를 사용하세요.
문자열에서 인덱스는 0부터 시작합니다.
첫 번째 문자열의 인덱스는 0이고, 두 번째 문자열의 인덱스는 1입니다.
$newstring = 'abcdef ghijk';
$pos = strpos($newstring, 'a');
var_dump($pos); // int(0)
PHP 8 이전의 버전에서는 검색할 문자열에 빈 문자열(''
)을 허용하지 않습니다.
''
)을 허용하지 않습니다.
$str = 'Hello, World!';
$substring = '';
$pos = strpos($str, $substring); // Warning: strpos(): Empty needle in
PHP 8.0.0 버전부터는 빈 문자열(''
)을 허용합니다.
이 함수를 Boolean
타입으로 반환 값을 사용할 때에는 주의가 필요합니다.
이 함수의 반환 값을 테스트하려면 ===
연산자를 사용하세요 .
대상 문자열에서 주어진 문자열의 위치가 첫 번째에 위치하고 있다고 가정해 보겠습니다.
이 경우 반환 값은 0
이 됩니다.
0
은 ==
연산자로 변환하면 false
를 반환하게 됩니다.
실제 주어진 문자열이 존재하지만 false
를 반환하기 때문에 부울(boolean) 타입으로 반환 값을 테스트하려면 엄격한 타입 비교가 수행되어 하기 때문에 ===
연산자를 사용해야 합니다.
Boolean
타입으로 반환 값을 사용할 때에는 ===
연산자를 사용하세요 .
$str = 'Hello, World!';
$substring = 'Hello';
$pos = strpos($str, $substring);
var_dump($pos); // int(0)
if ($pos === false) {
echo "문자열에 'Hello'를 찾을 수 없습니다.";
} else {
echo "문자열에 'Hello'가 포함되어 있습니다.";
}
// 출력: "문자열에 'Hello'가 포함되어 있습니다."
strpos() 함수에 한글을 적용할 경우, 한글과 같은 multi-byte 문자열을 지원하지 않아 원하지 않는 결과가 발생합니다.
영어, 숫자 등은 1byte이지만, 한글이나 중국어등은 2byte입니다. 2byte이상의 바이트로 표현되는 것을 "multi-byte(멀티바이트)"라고 합니다.
$str = '반갑습니다. 환영합니다!';
$substring = '환영';
$pos = strpos($str, $substring);
if ($pos !== false) {
echo "찾은 위치: $pos";
} else {
echo '찾을 수 없습니다.';
}
// 출력: 찾은 위치: 17 <= 원하지 않는 결과가 발생합니다.
mb_strpos()
함수는 strpos()
함수와 거의 동일한 기능을 하지만, 한글과 같은 multi-byte 문자열에서 안전하게 작동하는 기능을 제공한다는 큰 차이점이 있습니다.
한글과 같은 multi-byte 문자열에서는 mb_strpos()
함수를 사용하세요.
예제
strpos()
함수는 대소문자를 구분하여 문자열을 검색할 때 사용됩니다.
여기에서 몇 가지 strpos()
함수의 활용 사용 사례를 살펴보겠습니다.
파일 시스템 및 경로
대부분의 파일 시스템은 대소문자를 구분합니다. 따라서 파일 이름이나 경로를 정확하게 입력하려면 대소문자를 구분해야 합니다.
$file_path = '/var/www/html/project/files/document.txt';
$directory_name = '/var/www/html/project';
// 파일 경로에서 특정 디렉토리가 포함되어 있는지 확인
if (strpos($file_path, $directory_name) !== false) {
echo '파일은 지정된 디렉토리에 속해 있습니다.';
} else {
echo '파일은 지정된 디렉토리에 속해 있지 않습니다.';
}
// 출력: '파일은 지정된 디렉토리에 속해 있습니다.'
// 파일 경로에서 파일 이름 추출
$file_name = substr($file_path, strrpos($file_path, '/') + 1);
echo "파일 이름: $file_name";
// 출력: "파일 이름: document.txt"
이 예제에서는 strpos()
함수를 사용하여 파일 경로가 특정 디렉토리를 포함하는지를 확인하고, substr()
함수와 strrpos()
함수를 조합하여 파일 경로에서 파일 이름을 추출하고 있습니다.
일러두기
파일 경로와 관련된 작업에서는 실제 경로에 대해 정확한 문자열 처리가 필요하며, 경로 조작에 대한 안전한 방법을 사용하는 것이 좋습니다. 또한 PHP에서는 파일 경로를 다룰 때 realpath()
함수를 사용하여 정규화하고, pathinfo()
함수를 사용하여 파일 경로의 정보를 얻는 등의 방법이 더 안전하고 신뢰성이 있습니다.
참고문헌
같이 보기
- PHP is_string() 함수 - 변수의 문자열(string) 타입 확인
- PHP strlen() 함수 - 문자열 길이 확인
- PHP stripos() 함수 – 대소문자를 구분 없이 문자열에 특정 문자 포함 여부 확인
- PHP mb_strpos() 함수 – strpos()의 한글 지원 기능 제공
- PHP str_contains() 함수 – 대소문자 구분해서 문자열에 특정 문자 포함 여부 확인
- PHP substr() 함수 - 문자열을 잘라서 추출하기
- PHP mb_substr() 함수 – substr()의 한글 깨짐을 해결하기
- PHP mb_stripos() 함수 – stripos()의 한글 지원 기능 제공
- PHP preg_replace() 함수
- PHP str_replace() 함수 – 문자열에서 특정 문자열을 다른 문자열로 바꾸는 함수
- PHP preg_match() 함수
- PHP preg_match_all() 함수 - 개념 정리 및 사용 예제
- PHP trim() 함수 - 문자열의 양쪽 끝에서 공백 또는 지정된 문자열 제거