Position actuelle: Accueil> Derniers articles> Coopérer avec preg_match_all pour extraire et remplacer les idées

Coopérer avec preg_match_all pour extraire et remplacer les idées

M66 2025-05-18

Dans la programmation PHP, nous devons souvent effectuer des opérations complexes de correspondance et de remplacement sur les chaînes. preg_match_all et preg_replace_callback_array sont deux fonctions très utiles qui peuvent nous aider à implémenter cette fonctionnalité, en particulier lorsqu'ils traitent de la correspondance et du remplacement complexes. Cet article présentera en détail comment utiliser ces deux fonctions en combinaison et comment implémenter les tâches d'extraction et de remplacement à travers elles.

1. Introduction à preg_match_all

preg_match_all est une fonction utilisée dans PHP pour effectuer une correspondance globale d'expression régulière. Il analyse une chaîne et renvoie toutes les correspondances qui correspondent à l'expression régulière. Le résultat renvoyé par cette fonction est généralement un tableau multidimensionnel contenant toutes les chaînes de correspondance.

 $pattern = '/\bhttps?:\/\/[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+\b/';
$string = "Visit https://example.com or http://test.com for more information.";
preg_match_all($pattern, $string, $matches);
print_r($matches);

Le code ci-dessus correspondra à toutes les URL de la chaîne.

2. Introduction à preg_replace_callback_array

preg_replace_callback_array est une fonction puissante qui nous permet de faire correspondre plusieurs expressions régulières et de spécifier différentes fonctions de rappel pour chaque expression régulière. Cela permet un remplacement de chaîne flexible.

 $patterns = [
    '/\d+/' => function($matches) {
        return $matches[0] * 2;  // Multiplier le nombre par2
    },
    '/[a-zA-Z]+/' => function($matches) {
        return strtoupper($matches[0]);  // Convertir les lettres en capital
    }
];

$string = "The quick 3 brown 5 foxes";
echo preg_replace_callback_array($patterns, $string);

Ce code multipliera les nombres dans la chaîne et convertira les lettres en capitalisation.

3. Combinaison prég_match_all et preg_replace_callback_array pour réaliser l'extraction et le remplacement

Dans les applications pratiques, nous devons souvent extraire un contenu spécifique d'abord, puis les remplacer au besoin. Cette fonction peut être facilement implémentée en combinant preg_match_all et preg_replace_callback_array .

Supposons que nous devons extraire toutes les URL d'un texte et remplacer les noms de domaine dans ces URL par m66.net .

Étape 1: Utilisez preg_match_all pour extraire l'URL

Tout d'abord, nous pouvons utiliser preg_match_all pour extraire toutes les URL.

 $pattern = '/https?:\/\/([a-zA-Z0-9-]+\.[a-zA-Z0-9-]+)/';
$string = "Check out https://example.com and http://test.com for more information.";
preg_match_all($pattern, $string, $matches);
print_r($matches);

Ce code extrait toutes les pièces de nom de domaine URL ( Example.com et test.com ).

Étape 2: Utilisez preg_replace_callback_array pour remplacer le nom de domaine URL

Ensuite, nous utilisons preg_replace_callback_array pour remplacer la pièce de nom de domaine extraite. Nous pouvons remplacer le nom de domaine dans la fonction de rappel par m66.net .

 $patterns = [
    '/https?:\/\/([a-zA-Z0-9-]+\.[a-zA-Z0-9-]+)/' => function($matches) {
        // Remplacer par m66.net nom de domaine
        return str_replace($matches[1], 'm66.net', $matches[0]);
    }
];

$string = "Check out https://example.com and http://test.com for more information.";
$result = preg_replace_callback_array($patterns, $string);
echo $result;

Ce code remplacera tous les noms de domaine URL du texte par m66.net , par exemple: https://example.com sera remplacé par https://m66.net .

4. Exemple de code complet

Voici un exemple complet de code combinant preg_match_all et preg_replace_callback_array , qui est capable d'extraire l'URL et de remplacer le nom de domaine dedans en tant que m66.net :

 <?php
// Extraire tout URL 并替换nom de domaine
$pattern = '/https?:\/\/([a-zA-Z0-9-]+\.[a-zA-Z0-9-]+)/';
$string = "Check out https://example.com and http://test.com for more information.";

// extrait URL
preg_match_all($pattern, $string, $matches);
print_r($matches);

// 替换nom de domaine
$patterns = [
    '/https?:\/\/([a-zA-Z0-9-]+\.[a-zA-Z0-9-]+)/' => function($matches) {
        return str_replace($matches[1], 'm66.net', $matches[0]);
    }
];

// Remplacer la chaîne URL nom de domaine
$result = preg_replace_callback_array($patterns, $string);
echo $result;
?>

5. Résumé

En combinant preg_match_all et preg_replace_callback_array , nous pouvons d'abord extraire le contenu de chaîne requis, puis effectuer des opérations de remplacement personnalisées sur ces contenus. Cette méthode est très flexible et peut être appliquée à une variété de tâches complexes de traitement des chaînes.

Lorsque vous utilisez des expressions régulières pour traiter le texte, nous pouvons effectuer plus efficacement diverses tâches d'extraction et de remplacement, en particulier lors du traitement du texte avec des formats relativement fixes tels que les URL et les adresses e-mail.