우연히 문자열 시작 단어를 필터링할 필요가 있었음
구글링해보니 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의 인자를 메뉴얼에서 읽으니 잘 이해가 되지 않는다, 양수에 대해선 이해가되는데 음수인 경우는?
직접 테스트해봐야겠다.
- 'abcdeabc' 여기까지 탐색하고 종료하기 때문에 'a'의 마지막 위치는 5입니다.
- 이유는 양수는 offset위치부터 탐색을 시작합니다. 즉, 12번째자리부터 탐색을 시작하는데 'abcdeabcdeabcde' 중에 'cde'만 탐색하게됩니다.
구글링해보니 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'만 탐색하게됩니다.
'PHP' 카테고리의 다른 글
[PHP] 메모리 사용량을 통해 memory leak 찾기 (0) | 2016.12.20 |
---|---|
[PHP] 문자를 hex로 바꾸고 다시 복구하기 (0) | 2016.08.29 |
[PHP] AES128/ECB 복호화 하기 (0) | 2016.08.29 |
[PHP] php-mcrypt 모듈 설치하기 (0) | 2016.08.25 |