Je travaille sur une implémentation de moteur de recherche assez spécialisée en Perl, elle recherche (par regex) des documents spécifiquement délimités (un sous-ensemble de: punct:) les chaînes d'un fichier texte. Je fais les astuces d'indexation habituelles des moteurs de recherche, mais il y a un problème.Comment identifier les "jetons" (mauvais mot) d'une expression régulière
Certains des motifs d'expression rationnelle de recherche incluent, par nécessité, des délimiteurs utilisés dans le fichier. "Ok, je pense à moi-même," proximité de mot, alors ... facile "... et ce côté de l'équation est assez simple
L'astuce est que parce que les modèles de recherche sont des expressions régulières, je n'ai pas Je ne peux pas déterminer facilement les mots spécifiques que je devrais rechercher dans les données indexées (pensez à "diviser" si nous parlons de chaînes plus ordinaires.)
Exemple trivial, "square [\ s -] * dance" correspondrait directement sur "squaredance" mais un match de proximité sur "square dance" et "square-dance" (puisque '-' est un délimiteur) .J'ai besoin de savoir, sur la base de l'expression rationnelle, de chercher "square" et " danse "séparément, mais à proximité les uns des autres
Je suis un jeu pour la challe nge, mais je préfère utiliser le code établi. Mon instinct me dit que ce sera un crochet interne au moteur regex, mais je ne connais rien de tel. Aucune suggestion?
Les motifs de recherche peuvent-ils être arbitrairement complexes? Si vous prenez le temps de créer un index, pourquoi ne pas décoder votre format de stockage et rechercher les bits qui vous intéressent? –