Échapper aux caractères regex dans les modèles fournis par l'utilisateur
Lors de l'utilisation des entrées utilisateur comme modèles d'expression régulière, il est crucial de résoudre le problème des caractères qui possèdent des significations particulières dans la syntaxe regex. Par exemple, l'intention de l'utilisateur de rechercher « Mot(s) » sera interprétée à tort comme un groupe par le moteur d'expression régulière en raison des parenthèses. Pour éviter cela, nous devons traiter les parenthèses comme des chaînes littérales, et non comme des symboles regex.
Approche conventionnelle : remplacement manuel
Une méthode pour échapper ces caractères consiste à manuellement remplacez chaque instance par sa version échappée. Par exemple, nous pourrions remplacer "(s)" par "(s)". Cependant, cela nécessite de considérer tous les symboles regex possibles, ce qui peut être laborieux.
Une meilleure solution : la fonction re.escape
Une solution plus efficace consiste à utiliser la fonction re.escape de Python Fonction .escape(), qui échappe automatiquement les caractères non alphanumériques dans une chaîne. Cela nous permet de traiter les caractères regex spéciaux comme des chaînes littérales.
Par exemple, pour rechercher n'importe quelle instance de « Mot(s) » dans un texte, nous pouvons utiliser :
def simplistic_plural(word, text): word_or_plural = re.escape(word) + 's?' return re.match(word_or_plural, text)
Cette fonction renvoie un objet match si le motif est trouvé dans le texte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!