2009-05-26 7 views
1

Y at-il un moyen d'obtenir un motif regex pour arrêter automatiquement la recherche après un match. Je voudrais ajouter regex en cherchant un service web que j'essaye de créer, mais je ne veux pas que quelqu'un puisse lancer une regex qui prendrait beaucoup de temps, juste un match est assez bon. Est-ce possible?Comment arrêter la recherche de regex après 1 match sans utiliser de caractère non gourmand

+1

Votre pire scénario ne sera-t-il pas une personne qui mettra dans une regex complexe qui n'aura PAS de correspondance? Il semble que vous feriez mieux d'utiliser un autre mécanisme pour empêcher les recherches sur les expressions régulières de consommer du temps d'exécution. Alternativement, vous devriez savoir si regex va réellement être un goulot d'étranglement potentiel important avant de pré-optimiser – Jherico

Répondre

0

Le motif dégénéré vraiment mauvais ne correspond jamais. Et si vous trouvez un bon moyen de trouver les cas dégénérés, eh bien, vous devrez probablement lot of money. Vous êtes probablement mieux avec un délai d'attente. En Perl j'utiliserais alarm combiné avec un bloc eval.

Vous pouvez également rechercher (*COMMIT) dans Perl qui empêche le retour arrière.

1

Vous pourriez toujours vous retrouver avec une regex longue durée, même en utilisant un quantificateur limitant.

La mise en œuvre d'une capacité interruptible comme this thread est une autre option.

Questions connexes