Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

일치 횟수를 알 수 없을 때 PHP 정규식으로 특정 문자 바꾸기 – preg_replace() 활용법

개요

PHP에서는 preg_replace() 함수와 정규식(Regular Expression)을 함께 사용하면, 패턴이 몇 번 일치할지 미리 알 수 없는 경우에도 손쉽게 특정 문자를 치환할 수 있습니다.

문제 상황

예를 들어 다음과 같은 입력 문자열이 있다고 가정해 보겠습니다.

FirstName|John |LastName|Smith|SalaryProvided|2000|5000

여기서 목표는 두 숫자 20005000 사이에 있는 파이프(|) 문자만 공백으로 바꾸는 것입니다. 즉, 다른 위치의 파이프 문자는 그대로 유지하면서 아래와 같은 결과를 얻어야 합니다.

FirstName|John |LastName|Smith|SalaryProvided|2000 5000

해결 방법

핵심은 "4자리 숫자 뒤에 오는 파이프 문자 중, 그 뒤에 또 다른 4자리 숫자가 이어지는 경우"만 골라내는 것입니다. 이때 전방탐색(lookahead)(?=...)를 사용하면 조건은 검사하되 해당 부분을 실제로 소비하지 않으므로, 뒤따르는 숫자는 치환 대상에서 제외됩니다.

예제 코드

<!DOCTYPE html>
<html>
<body>
<?php
$SQLDatabaseResult = "FirstName|John |LastName|Smith|SalaryProvided|2000|5000";
$output = preg_replace("/(\d{4})\|(?=\d{4})/", "$1 ", $SQLDatabaseResult);
echo "결과=","<br>";
echo $output;
?>
</body>
</html>

실행 결과

결과=
FirstName|John |LastName|Smith|SalaryProvided|2000 5000

정규식 패턴 해설

  • (\d{4}): 4자리 숫자를 찾아 캡처 그룹에 저장합니다 (예: 2000).
  • \|: 그 뒤에 오는 파이프(|) 문자를 매칭합니다.
  • (?=\d{4}): 전방탐색으로, 파이프 뒤에 또 다른 4자리 숫자가 이어질 때만 일치시킵니다 (예: 5000).
  • $1 : 치환 시 첫 번째 캡처 그룹(앞의 숫자)을 그대로 유지하고, 파이프를 공백으로 대체합니다.

이처럼 preg_replace()는 정규식과 결합하면 일치 횟수를 사전에 알지 못해도 반복적으로 등장하는 패턴을 안전하고 정확하게 치환할 수 있습니다. 데이터베이스 조회 결과처럼 구분자 형식이 섞여 있는 문자열을 정리할 때 특히 유용한 기법입니다.