PHP에서 preg_replace ()는 텍스트 처리를위한 가장 편리한 "스위스 군대 나이프"입니다. PCRE (PERL 호환 정규 표현식)를 기반으로하는데, 이는 간단한 검색 및 교체뿐만 아니라 구조화 된 다시 쓰기, 데이터 청소 및 배치 이름 변경과 같은 완전한 복잡한 작업을 수행 할 수 있습니다. 이 기사는 정기적 인 교체의 핵심 기술을 신속하게 마스터 할 수 있도록 기능 서명, 정기 구문, 일반적인 시나리오 및 Preg_replace ()의 구덩이를 피하는 주요 포인트에 중점을 두어 처음부터 시작합니다.
기능 서명 :
<span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$pattern</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$replacement</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$subject</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$limit</span></span><span> = -</span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> &</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>
)
</span></span>$ 패턴 : 정규 표현식 (여러 규칙을 나타내는 배열이 될 수 있음)
$ 대체 : 콘텐츠 교체 (패턴에 해당하는 배열 일 수 있음)
$ 제목 : 보류중인 문자열 (또는 문자열 배열)
$ 한도 : 교체 시간의 상한 (기본값 -1은 한계 없음)
$ count : 출력 매개 변수, 실제 교체 수를 반환합니다.
최소 예 :
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Color or Colour? I like the color blue."</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/colou?r/i'</span></span><span>, </span><span><span class="hljs-string">'color'</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>, -</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$count</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Color or color? I like the color blue.</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> PHP_EOL . </span><span><span class="hljs-string">"Replaced: <span class="hljs-subst">$count</span></span></span><span>"; </span><span><span class="hljs-comment">// Replaced: 2</span></span><span>
</span></span>/colou? r/i : ? 이전 u를 선택적으로 두십시오. I 수정자는 상류 및 소문자를 무시합니다.
공통 구분자에는 / # ~ % {} () 등이 포함됩니다. 가장 걱정이없는 선택은 패턴과 충돌하지 않는 분리기를 선택하는 것입니다.
<span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'#https?://[^\s]+#'</span></span><span>, </span><span><span class="hljs-string">'[link]'</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span></span>모드에 많은 수 / 가 있으면 #을 사용하면 많은 수의 탈출을 피할 수 있습니다.
I : 사례를 무시하십시오
M : 멀티 라인 모드 ( ^ 및 $는 각 줄의 시작/끝과 일치합니다)
S : 단일 라인 패턴 ( . 또한 Newlines와 일치)
U : UTF-8을 눌러 처리합니다 (중국/이모티콘 시나리오에 강력하게 권장)
X : 모드에서 빈 공백 및 주석을 무시합니다 (가독성 향상)
u : Lazy Quantifier 반전 (기본적으로 탐욕에서 게으름으로의 수량자를 변경)
예제 (다중 라인 + 단일 라인) :
<span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-string">"ID:42\nPayload:\n{\n \"a\":1\n}\nEnd"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^Payload:(.*)End$/ims'</span></span><span>, </span><span><span class="hljs-string">'[DATA HIDDEN]'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span></span>캐릭터 클래스 : [abc] , [^abc] , \ d 번호, \ w 단어 문자, \ s blank
위치 앵커 : ^ 라인 시작, $ line end, \ b 단어 경계
수량 자 : * (0+), + (1+) ,? (0/1), {m, n} (범위)
탐욕/게으른 : + 탐욕입니까, +? 게으름 (가능한 한 적은 일치)
예제 (사서함 마스크) :
<span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">'[email protected]'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=.).+?(?=@)/'</span></span><span>, </span><span><span class="hljs-string">'***'</span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>);
</span><span><span class="hljs-comment">// a***@example.com</span></span><span>
</span></span>검색 전후 (? <= ...) 및 (? = ...)를 사용하여 불필요한 문자를 캡처하지 않도록 교체 범위를 정확하게 찾으십시오.
캡처 그룹화 : (...) 일치하는 콘텐츠를 $ 1, $ 2, ... (교체 문자열에 사용)로 절약합니다.
캡처되지 않은 그룹화 : (? : ...) 그룹화 만 저장되지 않고 더 나은 성능
예제 (이름 서식 : Zhang San-Li SI → Zhang San & Li Si ) :
<span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">'장 산-Li Si'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^(\S+)\s*-\s*(\S+)$/u'</span></span><span>, </span><span><span class="hljs-string">'$1 & $2'</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);
</span><span><span class="hljs-comment">// 장 산 & Li Si</span></span><span>
</span></span>예제 (URL 표준화 : http://example.com/path → 소문자 도메인 이름) :
<span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'HTTP://EXAMPLE.COM/Path'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^(https?):\/\/([^\/]+)/ie'</span></span><span>, </span><span><span class="hljs-string">"'<span class="hljs-subst">$1</span></span></span><span>://'.strtolower('</span><span><span class="hljs-subst">$2</span></span><span>')", </span><span><span class="hljs-variable">$url</span></span><span>);
</span></span>?? /e 수정자는 이전 코드 ( 더 이상 사용되지 않음 )로 표시 될 수 있으며 사용하지 않을 수 있습니다. 대신 콜백을 사용하십시오 (다음 섹션 참조).
교체 값을 계산 해야하는 경우 (예 : 케이스 변환, 동적 번호 매기기, 조건부 판단) 콜백을 사용하는 것이 더 안전합니다.
<span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"HTTP://EXAMPLE.COM/Path and http://MiXeD.com/Another"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(
</span><span><span class="hljs-string">'#\bhttps?://([^/\s]+)#i'</span></span><span>,
function (</span><span><span class="hljs-variable">$m</span></span><span>) {
</span><span><span class="hljs-comment">// $m[0] 전체 경기입니다,$m[1] 도메인 이름입니다</span></span><span>
</span><span><span class="hljs-variable">$scheme</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stripos</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>], </span><span><span class="hljs-string">'https://'</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'https://'</span></span><span> : </span><span><span class="hljs-string">'http://'</span></span><span>;
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$scheme</span></span><span> . </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]);
},
</span><span><span class="hljs-variable">$input</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-comment">// http://example.com/Path and http://mixed.com/Another</span></span><span>
</span></span>많은 양의 데이터를 처리하는 데 적합한 자매 기능도 있습니다. preg_replace_callback_array () 는 여러 규칙과 콜백을 한 번에 등록 할 수 있습니다.
<span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Price: 19.99 USD, Date: 2025-08-25"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback_array</span></span><span>([
</span><span><span class="hljs-string">'/\b(\d+(?:\.\d{2})?)\s*USD\b/'</span></span><span> => fn(</span><span><span class="hljs-variable">$m</span></span><span>) => </span><span><span class="hljs-string">'$'</span></span><span> . </span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>],
</span><span><span class="hljs-string">'/\b(\d{4})-(\d{2})-(\d{2})\b/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">fn</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$m</span></span></span><span>) => </span><span><span class="hljs-string">"<span class="hljs-subst">{$m[2]}</span></span></span><span>/</span><span><span class="hljs-subst">{$m[3]}</span></span><span>/</span><span><span class="hljs-subst">{$m[1]}</span></span><span>",
], </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Price: $19.99, Date: 08/25/2025</span></span><span>
</span></span>$ 패턴 과 $ 교체 지원 배열 모두. 교체 값이 하나씩 해당하지 않으면 각 모드에 동일한 교체 값이 적용됩니다.
<span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"foo 123 bar 456 baz"</span></span><span>;
</span><span><span class="hljs-variable">$patterns</span></span><span> = [</span><span><span class="hljs-string">'/\bfoo\b/'</span></span><span>, </span><span><span class="hljs-string">'/\d+/'</span></span><span>, </span><span><span class="hljs-string">'/\bbaz\b/'</span></span><span>];
</span><span><span class="hljs-variable">$replacements</span></span><span> = [</span><span><span class="hljs-string">'FOO'</span></span><span>, </span><span><span class="hljs-string">'[NUM]'</span></span><span>, </span><span><span class="hljs-string">'BAZ'</span></span><span>];
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$patterns</span></span><span>, </span><span><span class="hljs-variable">$replacements</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>);
</span><span><span class="hljs-comment">// FOO [NUM] bar [NUM] BAZ</span></span><span>
</span></span>다중 바이트 문자를 깨지 않도록 기본적으로 U 수정자를 추가하는 것이 좋습니다.
중국 분사 경계를 사용할 수 있습니까 ? 신뢰할 수 없는. \ b 는 "단어 경계"이며 ASCII 단어 문자를 목표로합니다. 중국 경계를 다룰 때는 명확한 캐릭터 클래스 또는 검색 전후를 사용하십시오.
예제 (중국어와 숫자 사이의 공간 추가) :
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"버전2게시2025년도8달25낮"</span></span><span>;
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=[\x{4e00}-\x{9fa5}])(?=\d)/u'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=\d)(?=[\x{4e00}-\x{9fa5}])/u'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>; </span><span><span class="hljs-comment">// 버전 2 게시 2025 년도 8 달 25 낮</span></span><span>
</span></span>\ x {4e00}-\ x {9fa5} 는 일반적으로 사용되는 중국어 간격입니다. u를 추가하십시오.
목표 : 모든 태그를 제거하고 일반 텍스트 만 유지하십시오.
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"<p>Hello <strong>world</strong> &copy; 2025</p>"</span></span><span>;
</span><span><span class="hljs-variable">$plain</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/<[^>]+>/'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$html</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$plain</span></span><span>; </span><span><span class="hljs-comment">// Hello world ? 2025</span></span><span>
</span></span>간단한 청소는 괜찮습니다. DOM을 사용하여 복잡한 HTML 구조를 강력하게 만듭니다.
<span><span><span class="hljs-variable">$phone</span></span><span> = </span><span><span class="hljs-string">"13812345678"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(\d{3})\d{4}(\d{4})/'</span></span><span>, </span><span><span class="hljs-string">'$1****$2'</span></span><span>, </span><span><span class="hljs-variable">$phone</span></span><span>);
</span><span><span class="hljs-comment">// 138****5678</span></span><span>
</span></span> <span><span><span class="hljs-variable">$template</span></span><span> = </span><span><span class="hljs-string">"Hi {name}, your order {id} is {status}."</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-number">42</span></span><span>, </span><span><span class="hljs-string">'status'</span></span><span> => </span><span><span class="hljs-string">'shipped'</span></span><span>];
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-string">'/\{(\w+)\}/'</span></span><span>, function(</span><span><span class="hljs-variable">$m</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">data</span></span><span>) {
</span><span><span class="hljs-title">return</span></span><span> $</span><span><span class="hljs-title">data</span></span><span>[$</span><span><span class="hljs-title">m</span></span><span>[1]] ?? $</span><span><span class="hljs-title">m</span></span><span>[0];
}, </span><span><span class="hljs-variable">$template</span></span><span>);
</span><span><span class="hljs-comment">// Hi Alice, your order 42 is shipped.</span></span><span>
</span></span> <span><span><span class="hljs-variable">$md</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$img</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-string">'/!\[([^\]]*)\]\((\S+)(?:\s+"([^"]*)")?\)/'</span></span><span>,
</span><span><span class="hljs-string">'<img src="$2" alt="$1" title="$3">'</span></span><span>,
</span><span><span class="hljs-variable">$md</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$img</span></span><span>;
</span><span><span class="hljs-comment">// <img src="/img/logo.png" alt="alt text" title="Title"></span></span><span>
</span></span> <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello,world! PHP\tis\ngreat."</span></span><span>;
</span><span><span class="hljs-comment">// 한 공간으로 나뉘 지 않는 연속 흰색 공간 압축</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^\S\r\n]+/'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-comment">// 중국 쉼표를 영어 쉼표로 교체하고 공간을 추가하십시오.</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/,/u'</span></span><span>, </span><span><span class="hljs-string">', '</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$text</span></span><span>; </span><span><span class="hljs-comment">// Hello, world! PHP is great.</span></span><span>
</span></span> <span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-string">'2025-08-25 14:03:22 [INFO] user=alice ip=203.0.113.9'</span></span><span>;
</span><span><span class="hljs-variable">$fmt</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-string">'/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) \[(\w+)\] user=(\w+) ip=([\d.]+)$/'</span></span><span>,
</span><span><span class="hljs-string">'[$3][$1T$2Z] $4@$5'</span></span><span>,
</span><span><span class="hljs-variable">$line</span></span><span>
);
</span><span><span class="hljs-comment">// [INFO][2025-08-25T14:03:22Z] [email protected]</span></span><span>
</span></span>우선 순위는 구체적이며 일반화 후 : 캐릭터 클래스는 피하기 위해 가능한 한 좁아야합니다 .* 남용. 필요한 경우 Lazy Quantifiers를 사용하거나 전후에 검색하십시오.
치명적인 역 추적을 피하십시오 : 모드의 (.+)+ , (.*) {m,} 와 같은 구조는 매우 폭발적입니다. 경계를 명확히 할 수 있다면 "뱀"을 사용하지 마십시오.
U 수정 자 사용 : 텍스트에 멀티 바이트 문자 (중국어/이모티콘)가 포함 된 경우 추가해야합니다. 그렇지 않으면 문자가 파괴 될 수 있습니다.
/e 대신 콜백 : 계산 해야하는 모든 교체품은 더 안전한 preg_replace_callback () 와 함께 사용됩니다.
제어 $ 한도 : 첫 번째 일치를 교체하려면 $ 한도를 1 로 설정하십시오.
통계 및 테스트 : $ count를 사용하여 교체 수를 수집합니다. 경계 사용 사례를 다루기 위해 주요 패턴에 대한 단위 테스트를 작성하십시오.
사전 컴파일/캐시 : PHP에는 내부적으로 PCRE에 대한 특정 캐시가 있습니다. 그러나 고주파 경로에서는 루프에 가변 모드를 구성하지 않도록 노력하십시오.
재생산 최소화 : 긴 모드를 분해하고 세그먼트별로 세그먼트를 확인하십시오.
가독성 : x 수정자를 사용하여 "주석이 달린"패턴을 작성하십시오.
<span><span><span class="hljs-variable">$pattern</span></span><span> = <span class="hljs-string">'/
^\s* # 처음에는 공백이 허용됩니다
(?P<key>\w+) # 열쇠
\s*=\s*
(?P<val>.+?) # 값(둔한)
\s*$
/x'</span>;
</span></span>탈출 인식 : PHP 문자열에서 탈출은 두 번 고려해야합니다 (예 : "\ d" 와 \\ d 의 차이).
첫 번째 일치 만 교체하십시오 : preg_replace ($ p, $ r, $ s, 1, $ count);
스크립트 태그를 안전하게 제거하십시오 : preg_replace ( '#<<script \ b [^>]*>.*? </script> #is', '', $ html);
URL에서 쿼리 매개 변수 이름 바꾸기 : match ([? &]) old = ([^&#]*) → $ 1new = $ 2
천분의 값으로 쉼표를 삽입 (단순 값) : preg_replace ( '/\ b (? = (\ d {3})+(?! \ d))/', ',', $ n);
초과 빈 라인 압축 : preg_replace ( '/(\ r) \ s*(\ r)/', "$ 1 $ 2", $ 텍스트);
보이지 않는 문자 제거 : preg_replace ( '/[\ x00- \ x1f \ x7f]/', ',', $ s);
Hump가 밑줄이 밑줄을 긋습니다 : preg_replace ( '/(? <!^) [az]/', '_ $ 0', $ camel);
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$log</span></span><span> = <span class="hljs-string"><<<LOG
[2025-08-25 10:00:01] user=john phone=13812345678 [email protected]
[2025-08-25 10:05:09] user=숲 phone=13987654321 [email protected]
LOG</span>;
</span><span><span class="hljs-comment">// 1) 기본 탈감작:휴대폰 번호 중간에 4 명이 별을 연주 할 수 있습니다.、이메일 사용자 이름의 첫 번째 문자 만</span></span><span>
</span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(\b1\d{2})\d{4}(\d{4}\b)/'</span></span><span>, </span><span><span class="hljs-string">'$1****$2'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=\b)[A-Za-z0-9._%+-](?:[A-Za-z0-9._%+-]?)+(?=@)/'</span></span><span>, </span><span><span class="hljs-string">'*'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span><span><span class="hljs-comment">// 2) 구조화 된 재 작성:변환 CSV 좋아요</span></span><span>
</span><span><span class="hljs-variable">$csv</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-string">'/^\[(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})\]\s+user=([^\s]+)\s+phone=([^\s]+)\s+email=([^\s]+)$/mu'</span></span><span>,
</span><span><span class="hljs-string">'$1,$2,$3,$4,$5'</span></span><span>,
</span><span><span class="hljs-variable">$log</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$csv</span></span><span>;
<span class="hljs-comment">/*
2025-08-25,10:00:01,john,138****5678,j*</span></span><span><span class="hljs-doctag">@example</span></span><span>.com
2025-08-25,10:05:09,숲,139****4321,l*</span><span><span class="hljs-doctag">@example</span></span><span>.cn
*/
</span></span>preg_replace () 의 힘은 " 당신이 찾고있는 패턴을 정확하게 묘사 하고 그것을보아야 할 것에 다시 작성하십시오"에 있습니다. 분리기와 수정자를 파악하고 그룹화 및 전면 및 검색 검색을 잘 활용하고 컴퓨팅이 필요할 때 콜백을 사용하면 매일 개발에서 청소에서 재 작성에 이르기까지 다양한 텍스트 작업을 쉽게 완료 할 수 있습니다. 더 작은 예제를 작성하고 더 많은 경계 테스트를 수행하면 규칙 성은 "Black Magic"에서 편리한 일일 도구로 변경됩니다.