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

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

Linda Hamilton
Linda Hamilton원래의
2024-11-21 10:19:10830검색

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;
}

위 내용은 정규식을 사용하여 문자열 자리 표시자 대체를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.