문자열 교체를 처리 할 때 PHP의 preg_replace_callback () 함수는 콜백 함수를 통해 일치하는 결과를 유연하게 처리 할 수 있습니다. 그러나 여러 가지 정규 표현식이있는 경우 각각 다른 논리로 처리해야합니다. preg_replace_callback_array () 가 이상적인 선택입니다.
php 7 이후, preg_replace_callback_array ()는 여러 정규 패턴과 해당 콜백 기능을 연관 배열 형태로 정의하는 우아한 방법을 제공합니다.
이 기사에서는 사용법을 통해 여러분에게 예제와 동시에 다중 일치하는 논리를 처리하는 방법을 보여줍니다.
preg_replace_callback_array(array $patterns_and_callbacks, string $subject, int $limit = -1, int &$count = null): string|array|null
$ patterns_and_callbacks 는 연관 배열이며 키는 정규식이며 값은 해당 콜백 함수입니다.
$ 주제 는 처리 할 문자열입니다.
텍스트에서 링크 및 이메일 주소를 식별하고 링크를 <a> 태그로 포장하고 Mailto를 추가하십시오 : 이메일 주소에 추가하십시오.
$text = <<<EOT
당사 웹 사이트에 오신 것을 환영합니다 http://m66.net/page,이메일을 보낼 수도 있습니다 support@m66.net 찾다。
EOT;
$result = preg_replace_callback_array([
// 거래하십시오 URL
'/\bhttps?:\/\/[^\s]+/i' => function ($matches) {
$url = htmlspecialchars($matches[0]);
return "<a href=\"{$url}\">{$url}</a>";
},
// 거래하십시오邮箱地址
'/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i' => function ($matches) {
$email = htmlspecialchars($matches[0]);
return "<a href=\"mailto:{$email}\">{$email}</a>";
}
], $text);
echo $result;
당사 웹 사이트에 오신 것을 환영합니다 <a href="http://m66.net/page">http://m66.net/page</a>,이메일을 보낼 수도 있습니다 <a href="mailto:support@m66.net">support@m66.net</a> 찾다。
preg_replace_callback_array () 는 특히 처리에 적합합니다.
Markdown, BBCode, Custom Syntax 등과 같은 다양한 텍스트 분석;
여러 형식의 식별 및 교체;
복잡한 텍스트로 다른 구조를 처리 할 때 가독성 및 유지 보수를 향상시킵니다.
정규 표현 순서가 중요하며 이전 규칙이 먼저 실행됩니다.
XSS 공격 (특히 사용자 입력을 처리 할 때)을 피하려면 htmlspecialchars ()를 사용하십시오.
PHP의 PCRE 라이브러리는 더 높은 버전에서 더 강력하며 PHP 7.1+를 사용하는 것이 좋습니다.
preg_replace_callback_array ()를 사용하면 더 명확한 코드 구조와보다 논리적 인 분리를 통해 여러 정규 패턴과 해당 처리 방법을 쉽게 정의 할 수 있습니다. 텍스트 처리에서 강력하고 과소 평가 된 도구입니다.
마스터 링은 코드를보다 우아하게 만들뿐만 아니라 개발 효율성을 크게 향상시킬 수 있습니다.