한글 문자열에 이(가), 은(는), 을(를) 조사가 포함된 경우 맞는 것으로 고쳐서 반환하는 함수를 만들어봤다.
조사 앞글자의 받침 유무에 따라 어떤 조사가 붙을지 선택되는 간단한 로직으로 코드는 짧고 단순하다.
<?php function fixHangulJosa(string $text): string { return preg_replace_callback('/ ([가-힣])( 을\(를\) |이\(가\) |은\(는\) ) /ux', function ($matches) { $coda = (mb_ord($matches[1]) - 0xAC00) % 28; $start = $coda ? 0 : 2; return $matches[1] . mb_substr($matches[2], $start, 1); }, $text); } $text = '나뭇잎이(가) 단풍 드는 가을은(는) 우리을(를) 감상에 젖게 만든다.'; // 나뭇잎이 단풍 드는 가을은 우리를 감상에 젖게 만든다. echo fixHangulJosa($text);