2013-06-13 2 views
1

J'ai un code qui attribue des attributs à un NSAttributedString selon que certains mots-clés sont présents dans la chaîne ou non. En d'autres termes, mettre en évidence la syntaxe.Utilisation d'expressions régulières pour mettre en évidence la syntaxe

Pour trouver si une certaine chaîne a ces mots-clés, j'utilise actuellement des expressions régulières pour trouver l'emplacement de ces mots avec "\\bKEYWORD\\b". Le problème est, évidemment, la performance.

J'ai d'abord essayé avec NSRegularExpression mais les performances étaient si lentes que le défilement de mon textview était presque impossible. J'ai ensuite essayé Oniguruma et les choses se sont améliorées mais c'est toujours sensiblement lent. Je peux essayer PCRE mais je ne pense pas que je vais ajouter beaucoup. Donc, ma question est: comment puis-je accélérer les recherches d'expressions régulières? Peut-être mettre en cache l'expression compilée?

Répondre

1

Il semble que vous cherchiez chaque mot individuellement. Je voudrais créer un tableau de mots de recherche, puis se joindre à eux avec une alternance regex | symbole

recherche Compte tenu des mots tels que: alpha, bravo, charlie, delta, echo

résultent, respect regex: \b(?:alpha|bravo|charlie|delta|echo)\b

enter image description here

La non capture construction de groupe (?: ... ) est un peu plus rapide que la syntaxe de capture ( ... )

+0

Cette opération et la mise en cache du motif ont entraîné une augmentation significative des performances. – ruipacheco

+0

Puis-je demander comment vous avez généré l'image dans votre réponse? – Dan

Questions connexes