PHP의 preg_split() 함수를 사용하면 정규 표현식을 기반으로 문자열을 손쉽게 분리할 수 있습니다. 이번 글에서는 하이픈(-)을 구분자로 사용하되, 특정 조건을 만족하는 하이픈만 기준으로 문자열을 나누는 방법을 알아보겠습니다.
예를 들어 다음과 같이 문자열과 숫자가 하이픈으로 연결된 입력값이 있다고 가정해 보겠습니다.
$values = "ABC-DEF IJKL-3553435-8990987876";
여기서 우리가 원하는 출력 결과는 다음과 같습니다.
Array ( [0] => ABC-DEF IJKL [1] => 3553435 [2] => 8990987876 )
핵심 아이디어: 전방 탐색(Lookahead) 패턴
단순히 하이픈을 기준으로 분리하면 "ABC-DEF" 부분까지 잘려나가 원하는 결과를 얻을 수 없습니다. 이 문제를 해결하려면 정규 표현식의 전방 탐색(lookahead)을 활용한 /-(?=[0-9])/ 패턴을 사용합니다. 이 패턴은 "바로 뒤에 숫자가 오는 하이픈"만 분리 지점으로 인식하기 때문에, 뒤에 문자가 이어지는 하이픈은 그대로 보존됩니다.
예제 코드
전체 PHP 코드는 다음과 같습니다.
<!DOCTYPE html>
<html>
<body>
<?php
$values = "ABC-DEF IJKL-3553435-8990987876";
$exploded = preg_split('/-(?=[0-9])/', $values, 3);
print_r($exploded);
?>
</body>
</html>
실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Array ( [0] => ABC-DEF IJKL [1] => 3553435 [2] => 8990987876 )
preg_split()의 세 번째 인자인 3은 최대 분리 횟수를 제한하는 옵션입니다. 이 값을 지정하면 두 번째 하이픈까지만 나누고, 남은 문자열은 마지막 배열 요소에 그대로 담기게 됩니다. 이처럼 전방 탐색과 분리 횟수 제한 옵션을 함께 활용하면 복잡한 구분 규칙도 간결하고 안정적으로 처리할 수 있습니다.