"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 정규식을 사용하여 문자열 자리 표시자 대체를 어떻게 최적화할 수 있습니까?

정규식을 사용하여 문자열 자리 표시자 대체를 어떻게 최적화할 수 있습니까?

2024년 12월 14일에 게시됨
검색:877

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

RegEx를 사용한 문자열 자리 표시자 대체 최적화

dynStr() 함수는 다음과 같이 표시된 특정 문자열에서 자리 표시자 변수를 검색하고 바꾸는 것을 목표로 합니다. 중괄호. 올바르게 작동하는 동시에 효율성과 단순성이 향상될 수 있습니다.

dynStr()의 주요 문제 중 하나는 $matches에 대한 이중 배열 구조에 있습니다. 두 개의 foreach 루프를 사용하여 원하는 데이터에 액세스하는 것은 비효율적입니다. 추가 처리 없이 자리 표시자 변수를 직접 추출하려면 정규식을 단순화하는 것이 좋습니다.

preg_match_all('/{\w }/', $str, $matches);

다음, 자리 표시자 변수를 대체하는 루프를 최적화할 수 있습니다. 현재 접근 방식은 여러 문자열 조작 작업과 배열 조회를 사용하므로 불필요하게 복잡해집니다.

foreach($match_group as $match) {
    // ...
    $str = ...
}

더 간단하고 간결한 대안은 단일 함수 호출을 사용하여 자리 표시자를 직접 대체하는 것입니다.

foreach($matches[0] as $match) {
    $str = strtr($str, [$match => $vars[strtolower($match)]]);
}

strtr() 함수는 자리 표시자 변수와 $vars 배열의 해당 값 사이의 매핑을 정의하여 여러 대체 작업을 효율적으로 수행합니다.

또한 이 함수는 대소문자를 구분하지 않도록 설정할 수 있습니다. 자리 표시자 변수와 배열 키를 모두 소문자로 변환하여 추가 처리가 필요하지 않습니다.

$allowed = array_keys(array_change_key_case($vars, CASE_LOWER));
...
$str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);

이러한 최적화를 통합하면 보다 효율적이고 간소화된 dynStr() 함수가 생성됩니다.

function dynStr($str,$vars) {
    preg_match_all('/{\w }/', $str, $matches);
    foreach($matches[0] as $match) {
        $vars = array_change_key_case($vars, CASE_LOWER);
        $str = strtr($str, [$match => $vars[strtolower($match)]]);
    }
    return $str;
}
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3