본문 바로가기

PHP

[PHP] strrpos 함수의 offset 인자

우연히 문자열 시작 단어를 필터링할 필요가 있었음
구글링해보니 Java의 startsWith, endsWith와 같은 함수를 구현한 글이 있었음
- http://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php

내부적으로 strrpos를 사용하고 있었음, 이 함수는 찾고자하는 문자($needle)의 마지막 위치를 반환하는 녀석이었음
- http://php.net/manual/kr/function.strrpos.php

그런데 offset의 인자를 메뉴얼에서 읽으니 잘 이해가 되지 않는다, 양수에 대해선 이해가되는데 음수인 경우는?
직접 테스트해봐야겠다.

Offset이 없을 경우

$strrpos_text = 'abcdeabcdeabcde';
$position = strrpos($strrpos_text, 'a');
echo "---- $position ----\n";
출력 : ---- 10 ----
- 'a'의 마지막 위치가 10입니다.

Offset이 음수인경우

$strrpos_text = 'abcdeabcdeabcde';
$position = strrpos($strrpos_text, 'a', -7);
echo "---- $position ----\n";
출력 : ---- 5 ----
- offest이 -7인 경우 뒤에서 7번째까지만 탐색하고 종료하게됩니다.
- 'abcdeabc' 여기까지 탐색하고 종료하기 때문에 'a'의 마지막 위치는 5입니다.

Offset이 문자열 길이만큼 음수인경우

php
$strrpos_text = 'abcdeabcdeabcde';
$position = strrpos($strrpos_text, 'a', -strlen($strrpos_text));
echo "---- $position ----\n";

출력 : ---- 0 ----
- 문자열 길이만큼 음수이기 때문에 무조건 첫단어 매칭만 보고 종료됩니다.

Offset이 양수인경우

php
$strrpos_text = 'abcdeabcdeabcde';
$position = strrpos($strrpos_text, 'a', 12);
echo "---- $position ----\n";

출력 : ----  ----
- 0도 아닌 정확히 false가 출력됩니다
- 이유는 양수는 offset위치부터 탐색을 시작합니다. 즉, 12번째자리부터 탐색을 시작하는데 'abcdeabcdeabcde' 중에 'cde'만 탐색하게됩니다.