mb_strrichr() 함수란?
PHP의 mb_strrichr() 함수는 멀티바이트 문자열에서 특정 문자열(needle)이 마지막으로 나타나는 위치를 기준으로 문자열을 추출하는 데 사용됩니다. 이 함수는 mb_strrchr()과 유사하지만, 대소문자를 구분하지 않는다는 점이 가장 큰 차이입니다.
주어진 대상 문자열(haystack)에서 needle이 마지막으로 등장하는 지점을 찾아 해당 지점을 기준으로 한 문자열의 일부를 반환하며, needle을 찾지 못하면 false를 반환합니다.
문법
string mb_strrichr( $str_haystack, $str_needle, $bool_before_needle = false, $str_encoding )
매개변수
mb_strrichr() 함수는 다음 네 가지 매개변수를 받습니다.
str_haystack − needle이 마지막으로 나타나는 위치를 찾을 원본 문자열입니다.
str_needle − haystack 안에서 검색할 문자열입니다.
before_needle − 반환할 문자열의 범위를 결정하는 불리언 값입니다.
true로 설정하면, 문자열 처음부터 needle이 마지막으로 나타나는 위치 앞부분까지 반환합니다.
false(기본값)로 설정하면, needle이 마지막으로 나타나는 위치부터 문자열 끝까지 반환합니다.
str_encoding − 사용할 문자 인코딩 이름입니다. 생략하면 PHP의 내부 인코딩이 사용됩니다.
반환값
이 함수는 조건에 따라 haystack 문자열의 지정된 부분을 반환하고, needle을 찾지 못한 경우 false를 반환합니다.
예제 1: before_needle이 false인 경우
<?php
// UTF-8 인코딩 사용
// 대상 문자열: HelloWorld
// 검색 문자열(needle): "rl"
// before_needle: false
$string = mb_strrichr("HelloWorld", "rl", false, "UTF-8");
// 출력 결과: string(3) "rld"
var_dump($string);
?>출력 결과:
string(3) "rld"
"rl"이 마지막으로 나타나는 위치부터 문자열 끝까지인 rld가 반환되었습니다.
예제 2: before_needle이 true인 경우
<?php
// UTF-8 인코딩 사용
// 대상 문자열: Hello World
// 검색 문자열(needle): "rl"
// before_needle: true
$string = mb_strrichr("Hello World", "rl", true, "UTF-8");
// 출력 결과: string(8) "Hello Wo"
var_dump($string);
?>출력 결과:
string(8) "Hello Wo"
before_needle이 true이므로 문자열 처음부터 needle이 마지막으로 나타나는 위치 앞까지인 Hello Wo가 반환되었습니다.
예제 3: needle을 찾지 못한 경우
<?php
// UTF-8 인코딩 사용
// 대상 문자열: Hello World
// 검색 문자열(needle): "ef"
// "ef"는 haystack에서 일치하지 않으므로 false 반환
$string = mb_strrichr("Hello World", "ef", true, "UTF-8");
// 출력 결과: false
var_dump($string);
?>출력 결과:
bool(false)
참고: 대소문자를 구분하지 않음
mb_strrichr()은 대소문자를 구분하지 않으므로, 검색 문자열의 대소문자가 달라도 정상적으로 동작합니다.
<?php
// 대문자 "RL"로 검색해도 동일한 결과를 얻을 수 있습니다.
$string = mb_strrichr("HelloWorld", "RL", false, "UTF-8");
var_dump($string); // string(3) "rld"
?>반면, 대소문자를 구분하는 mb_strrchr() 함수와 혼동하지 않도록 주의해야 합니다.
정리
mb_strrichr() 함수는 멀티바이트 문자열을 다룰 때 대소문자 구분 없이 마지막 발생 위치를 기준으로 문자열을 추출하는 데 유용합니다. 파일 확장자 추출, URL 경로 처리 등 다양한 상황에서 활용할 수 있으며, before_needle 매개변수를 통해 반환 범위를 자유롭게 조절할 수 있다는 점이 장점입니다.