2017-04-02 2 views
0

Je n'arrive pas à comprendre comment l'éditeur de texte peut mettre à jour la regex pendant que l'utilisateur tape - modifier un caractère de texte peut changer - il faut rescanner tout le texte sur chaque touche utilisateur. Mais ils le font.Mise en évidence des correspondances regex dans l'éditeur de texte

  • Expression rationnelle incrémentale à base de perl? - ils ne sont pas dans la nature
  • Essayez de chercher après le match précédent? - les correspondances précédentes et suivantes peuvent être manquantes ou trop éloignées de l'écran qui ont besoin de re-scanner la plus grande partie du document, aussi regex avec lookaround sera cassé
  • Un autre fil? - semble être seule vraie solution, mais vous recevez le décalage en évidence gênant
    • peut être possible de déplacer vieux jeu mettant en lumière manualy sur l'entrée d'utilisateur (mais nous avons encore un problème nouveau mise en évidence de correspondance/ancienne mise en évidence la suppression de décalage)
    • peut être la recherche dans le tampon de l'écran (la plupart des utilisateurs regex consomment des chaînes courtes), puis exécutez fil pour mettre en évidence pour trouver d'autres longs matchs avec un décalage (meilleur point fort du spectacle tard que jamais)

Je voudrais en savoir plus à propos des réalisations existantes.

Par exemple, nous avons: fichier de 5,9 Mo (en commençant par ABC, se termine par abc) et 2 regex: ABC(.|\n)*abc et using(.*?);

  • Sublime Text (de regex1): regex hors de l'espace de pile
  • Sublime Text (de regex2): en retard ~ 300 ms, ne mettez pas à l'écran jusqu'à ce touche jusqu'à
  • EditPad Lite 7 (regex1): ~ 500 ms lag sur la saisie de texte, si supprimer la dernière 'c' - 5000 ms
  • EditPad Lite 7 (ABC.*abc - ils utilisent un point multiligne): pas de retards! si enlever le dernier 'c' - est en retard de 400ms.
  • EditPad Lite 7 (ABC.*abc, fichier 578,3 Mb): pas de retards. Comment?? Supprimer le dernier 'c' - 50 secondes sur le caractère d'entrée
  • EditPad Lite 7 (regex2): pas de retard! Vim (regex1): maxmempattern, mais si utilisation \(.\|\n\)*abc - met en évidence si le fichier a défilé à la fin, aucun retard, la mise en évidence fonctionne jusqu'à ce que défilent jusqu'à 300 lignes de 17445, puis il est manquant et ne sont pas retournés. Comment ça marche?
  • vim (regex2): sans lag, pas de bugs

balayage fichier entier sur chaque entrée utilisateur:

  • Regex .NET (de regex1): ~ 300 ms lag sur la saisie de texte (si supprimer dernière 'c' du texte - se fige pour toujours)
  • Regex .NET (de regex2): ~ 300 ms
  • x86 .NET PCRE maladroit wrapper 2-fonctions (regex1): échouer avec l'erreur
  • .NET x86 PCRE maladroit Wrapper à 2 fonctions (re gex2): ~ 300 ms

Répondre

0

Si quelqu'un est intéressé - j'ai tampon utilisé avec la taille = CARAC écran + stock (il suffit de ne pas mettre en évidence les grands matches)