2010-12-11 84 views
0

J'ai une longue regex tranquille et parfois elle réagit rapidement quelques fois elle charge longtemps comme un fou.Problèmes avec l'expression régulière C# charge longue

voici mon regex:

<div class=""rwResult bg"">.*?mp3/d/[^>]+>(?<Name>[^<]+)</a>.*?artist:[^>]+>(?<Artist>[^<]+).*?user</span>[^>]+[^""]+""(?<Uploader>[^""]+).*?category:.*?"">.*?"">(?<Category>[^<]+).*?time: (?<Duration>[^ ]+) \| (?<StreamSize>[0-9]+) (?<Weight>[^ ]+) \| listened: (?<Clicks>[0-9]+).*?<a href=""(?<DownloadLink>http://dl[^""]+) 

plutôt que d'utiliser beaucoup de regex pour chaque groupe je préfère faire un regex temps. Y at-il une fonction que je pourrais vérifier ou éviter le chargement long pendant l'exécution de l'expression régulière?

Je travaille C# ou F # espérons que n'importe qui pourrait répondre à ce problème.

merci.

+2

Vous pourriez être intéressé par cet article sur le retour catastrophique (http://www.regular-expressions.info/catastrophic.html), qui documente spécifiquement certains des effets secondaires désagréables du quantificateur '. *?'. – Juliet

+0

remercie tout le monde. Le site internet était super. M'a aidé à travers beaucoup ^^ " –

Répondre

1

Je pense que vous utilisez le mauvais outil. Vous voulez vraiment Xpath, et peut-être XSLT. La seule fois où vous voulez utiliser une expression régulière pour analyser du XML brut, c'est quand le XML est suspecté d'être cassé syntaxiquement de manière prévisible.

Sérieusement, regardez Xpath - c'est magique pour explorer la structure des documents XML et extraire les bits que vous voulez.

2

Il semble que vous essayez d'analyser un document XML à l'aide d'une expression régulière. Ce n'est pas vraiment une approche optimale. Ma conjecture est que vous voyez des problèmes à cause de l'utilisation de backtracking dans votre expression régulière.

Vous pouvez essayer de réécrire votre expression régulière, mais XML n'est pas un langage régulier et n'est donc pas analysable par les expressions régulières.

Jetez un coup d'œil au document How to read XML from a file by using Visual C# pour commencer. Sidenote: Pour une lecture amusante de ce qui se passe lorsque vous essayez d'analyser une langue non régulière à l'aide d'une expression régulière, consultez la section Surplus de la pile question.