php에서 preg_replace_callback_array는 여러 정규 표현식을 처리하고 일치시 지정된 콜백 함수를 실행할 수있는 매우 강력한 기능입니다. 일반적으로, 각 정규 표현식에 대해 콜백 함수를 지정해야하지만 논리 복잡성이 증가함에 따라이 접근법은 콜백 함수가 장황하고 유지하기가 쉽지 않을 수 있습니다. 이 프로세스를 단순화하기 위해 이름 지정된 캡처 그룹을 사용하여 preg_replace_callback_array 의 콜백 로직을 단순화하여 코드를 더 명확하고 유지 관리 할 수 있습니다.
정규 표현식에서, 이름이 지정된 그룹화는 일치하는 결과의 명명 된 식별자이며 숫자 인덱싱뿐만 아니라 일치하는 컨텐츠에 이름으로 액세스 할 수 있습니다. 그룹 이름 지정에 대한 구문은 다음과 같습니다.
(?<name>pattern)
여기서 이름 은 해당 그룹의 이름이며 패턴은 실제 정규 표현 패턴입니다.
preg_replace_callback_array 에서 일반적으로 여러 패턴과 해당 콜백 함수가 포함 된 배열을 전달합니다. 여러 정규 표현식을 처리 해야하는 경우 각 표현식에 대한 콜백 함수를 작성해야하므로 코드를 장악 할 수 있습니다. 명명 된 그룹화를 사용하면 더 직관적으로 일치하는 결과를 얻을 수 있으므로 콜백 로직에 대한 의존성을 줄일 수 있습니다.
특정 예는 다음과 같습니다.
preg_replace_callback_array를 통해 일부 쿼리 매개 변수를 교체 해야하는 URL 세트가 있다고 가정합니다. 명명 된 그룹화를 사용하여 콜백 함수의 논리를 단순화 할 수 있습니다.
<?php
// 일반 표현식 및 콜백 기능이 포함 된 배열을 정의하십시오
$patterns = [
'/(?<scheme>https?):\/\/(?<host>[a-zA-Z0-9.-]+)\/(?<path>[^?]+)\?(?<query>.*)/' => function ($matches) {
// 명명 된 그룹화에 의한 일치 결과에 액세스합니다
$scheme = $matches['scheme'];
$host = $matches['host'];
$path = $matches['path'];
$query = $matches['query'];
// 여기서 쿼리 매개 변수를 처리 할 수 있습니다
$query = str_replace('example.com', 'm66.net', $query);
// 교체 된 문자열을 반환합니다
return $scheme . '://' . $host . '/' . $path . '?' . $query;
}
];
// 무엇을 다룰 것 URL 목록
$urls = [
'https://example.com/path/to/resource?param1=value1¶m2=value2',
'http://example.com/another/path?param1=value1',
];
// 사용 preg_replace_callback_array 교체하십시오
$updatedUrls = preg_replace_callback_array($patterns, $urls);
// 교체 후 결과를 출력하십시오
foreach ($updatedUrls as $url) {
echo $url . PHP_EOL;
}
?>
정규 표현 부분 :
(? <Scheme> HTTPS?) : HTTP 또는 HTTPS를 일치시키고 이름 IT 구성표를 일치시킵니다.
(? <host> [a-za-z0-9 .-]+) : 도메인 이름을 일치시키고 호스트 이름을 지정하십시오.
(? <path> [^?]+) : 경로 부분과 일치하고 경로 를 지정하십시오.
(? <query>.*) : 쿼리 매개 변수 부분을 일치시키고 쿼리 이름을 지정합니다.
콜백 함수 파트 : 콜백 함수에서는 액세스 프로세스를 단순화하는 일치 (예 : $ matches [ 'scheme'] )의 그룹화를 지정하여 정규식 일치의 부분을 얻습니다. 또한 쿼리 문자열 부분을 처리하고 도메인 이름 example.com을 m66.net 으로 대체했습니다.
preg_replace_callback_array : 이 함수는 정규식 및 콜백 함수의 배열을 수용하고 URL과 하나씩 일치하고 해당 콜백 함수를 실행합니다.