본문 바로가기
IT/web

[PHP] 상수를 이용한 다중 텍스트 치환 / const, define to text, constant, preg_match_all

by 어느해겨울 2022. 1. 21.

상수를 이용한 다중 텍스트 치환

상수를 이용한 다중 텍스트 치환을 어디다 쓸 수 있는지 예를 들어보자면

다국어를 지원하는 환경에서 현재 설정된 언어셋이 무엇인지 모르겠지만 프로그램에선 상수화된 키워드를 사용하여 텍스트를 사용하는(e.g. UI 팝업, 시스템 로그 등) 경우 사용할 수 있다.

언어셋에 맞게 텍스트를 구성하는 게 아니라 모든 텍스트를 키워드로 구성해두고 상수를 프리셋으로 사용하면 가변적인 대응이 가능해진다.

그 밖에도 유연한 텍스트 구성에 사용할 수 있으니 참고하자.


 

소스코드

preg_match_all()를 사용하여 대상 텍스트 내에 { } 괄호로 둘러싸인 키워드와 동일한 이름을 사용하는 상수로 대체한다.

동일한 상수가 있다면 해당 값을 사용하고 const, define 모두 사용 가능하다.

단, { } 패턴을 사용했으나 키워드와 동일한 상수가 없다면 일반 텍스트로 출력한다.

<?php
    const STR_MSG_1 = "다중 텍스트 치환자";
    const STR_MSG_2 = "const 상수로 치환한다";
    define("STR_MSG_3", "define 상수도 치환한다");


    $text = "const상수 - {STR_MSG_1}\nconst상수 - {STR_MSG_2}\ndefine상수 - {STR_MSG_3}\n상수정의안됨 - {STR_MSG_4}";


    preg_match_all("#\{(.*?)\}#", $text, $matches);
    foreach( $matches[1] as $match ) {
        if( @constant($match) ) {
            $text = preg_replace("#\{{$match}\}#", constant($match), $text);
        }
    }

    print($text);
?>

 

결과

STR_MSG_1, STR_MSG_2, STR_MSG_3의 키워드는 상수로 정의되어있어 치환이 되었으나 상수로 정의가 안된 STR_MSG_4는 일반 텍스트로 나오는 것을 확인할 수 있다.

const상수 - 다중 텍스트 치환자
const상수 - const 상수로 치환한다
define상수 - define 상수도 치환한다
상수정의안됨 - {STR_MSG_4}

 

끝.

 

 

댓글