J'ai besoin d'une fonction qui pourrait générer une expression régulière. Par exemple, si j'écris
$pat = "Mon {$var} est {$var2}"
pour générer une expression régulière que j'utiliserai avec
preg_match($pat,"Mon nom est Kevin",$matches);
afin d'obtenir
$matches[1] = 'nom';
$matches[2] = 'Kevin';
et la chaîne pourrait être : "Mon $motnom est $nom et j'ai $âge ans"
Et le problème est :
FIG1
}
?>
FIG2
$pat = gen_pattern('mon nom est {$X}');
ereg($pat,'mon nom est vache',$regs);
//$regs[1] == "vache„
([^\s]*)
$pat = gen_pattern('mon {$YZ} est {$IJK}');
ereg($pat,'mon nom est vache',$regs);
//$regs[1] == "nom", $regs[2] == "vache"
La description de mon devoir est la suivante :
La Figure 1 montre une fonction qui peut générer une expression régulière, utilisable pour la fonction ereg.
La Figure 2 montre comment le motif devrait fonctionner. Dans la chaîne donnée, chaque élément {$ABC} représente un espace réservé, c'est-à-dire que {$X} est l'espace réservé unique dans "mon nom est {$X}", et il y a deux espaces réservés dans "mon {$YZ} est {$IJK}". Un espace réservé peut avoir n'importe quelle longueur supérieure à zéro.
Dans le motif résultant, chaque espace réservé représente un mot unique du texte, qui doit être ajouté à la liste des résultats. Par exemple, {$X} représente le prochain mot après "mon nom est". Par conséquent, $regs[1] devient "vache" si le motif est utilisé sur le texte "mon nom est vache". Supposons que nous ayons uniquement des textes de la forme [a-z ]* (notez l'espace blanc).
Ma tâche :
Remplissez l'endroit vert dans la Figure 1. Ne vous embêtez pas avec la gestion des erreurs ou la vérification de la syntaxe correcte de la chaîne donnée (c'est-à-dire que les entrées invalides telles que "mon nom est {{}" ou similaire ne se produiront pas).
Et je ne sais par où commencer.