2 votes

Un motif Regex provoque un retour en arrière catastrophique dans les cas limites

J'ai ces deux modèles de regex simples pour faire correspondre les urls qui proviennent de ces magasins, mais ils conduisent à un retour en arrière catastrophique et à un navigateur gelé lorsqu'ils sont exécutés sur une chaîne d'url avec un cas limite. Cette logique est exécutée sur des milliers de requêtes aléatoires, donc la probabilité d'un retour en arrière catastrophique est élevée. Quelqu'un a-t-il une idée de ce qui pourrait être erroné dans la façon dont j'ai écrit cette expression rationnelle ?

> ".*://.*.newegg.com/Product/Product.*"
> ".*://.*.gamestop.com*.*Product-Variation*.*productDetailsRedesign"

1voto

Ryszard Czech Points 10589

Vous avez trop de motifs de points gourmands dans les expressions. Essayez d'être un peu plus verbeux :

\w+://[^/]*\.newegg\.com/Product/Product\S*

Le deuxième modèle :

\w+://[^\s/]*\.gamestop\.com\S*?Product-Variation\S*?productDetailsRedesign

Voir preuve n°1 | preuve n°2 .

Utilice \S*? pour correspondre à tous les caractères différents des espaces (aussi peu que possible).

Échappez les caractères de point car ils sont des métacaractères de regex.

Utilice [^...] les classes de caractères négatives si vous savez qu'il ne peut y avoir de tels caractères entre deux sous-chaînes dans une correspondance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X