우리 모두는 PHP에서 Strtr 및 strreplace와 같은 함수를 교체에 사용할 수 있다는 것을 알고 있지만 매번 모두 교체됩니다. 예:
"abcabbc", 위의 함수를 사용하여 이 문자열의 b를 바꾸면 모두 바뀌지만, 한두 개만 바꾸려면 어떻게 해야 할까요?
꽤 흥미로운 질문이네요. 예전에 비슷한 처리를 했던 적이 있었는데, 그 때 preg_replace를 직접 사용해 구현했습니다.
mixed preg_replace(혼합 패턴, 혼합 대체, 혼합 주제 [, int 제한] )
패턴과 일치하는 주제를 검색하여 대체 항목으로 바꿉니다. 한계가 지정되면 한계 일치만 대체됩니다. 한계가 생략되거나 값이 -1인 경우 모든 일치가 대체됩니다.
preg_replace의 네 번째 매개변수는 교체 횟수를 제한할 수 있으므로 이 문제를 이런 방식으로 처리하는 것이 매우 편리합니다. 하지만 php.net에서 str_replace에 대한 함수 설명을 살펴보면 실제로 몇 가지 대표적인 함수를 골라낼 수 있습니다.
방법 1: str_replace_once
아이디어먼저 교체할 키워드의 위치를 찾은 후 substr_replace 함수를 사용하여 직접 교체합니다.
<?php function str_replace_once($needle, $replace, $haystack) { // Looks for the first occurence of $needle in $haystack // and replaces it with $replace. $pos = strpos($haystack, $needle); if ($pos === false) { // Nothing found return $haystack; } return substr_replace($haystack, $replace, $pos, strlen($needle)); } ?>
방법 2, str_replace_limit
아이디어여전히 preg_replace를 사용하지만 해당 매개변수는 preg_replace에 더 가깝고 일부 특수 문자가 이스케이프되어 더욱 다양해졌습니다.
<? function str_replace_limit($search, $replace, $subject, $limit=-1) { // constructing mask(s)... if (is_array($search)) { foreach ($search as $k=>$v) { $search[$k] = '`' . preg_quote($search[$k],'`') . '`'; } } else { $search = '`' . preg_quote($search,'`') . '`'; } // replacement return preg_replace($search, $replace, $subject, $limit); } ?>
편집자가 정리한 기사 "한 번만 교체되는 PHP 키워드 구현 기능"과 결합하여 함께 공부하면 예상치 못한 이득을 얻을 것이라고 믿습니다.