web-dev-qa-db-fra.com

Quelle est la complexité de l'expression régulière?

Quelle est la complexité de la longueur de chaîne nécessaire pour effectuer une comparaison d'expression régulière sur une chaîne?

65
Ahmad Farid

La réponse dépend de ce que vous entendez exactement par "expressions régulières". Les expressions rationnelles classiques peuvent être compilées en Automates finis déterministes pouvant correspondre à une chaîne de longueur N en O(N) temps. Certaines extensions du langage regex changent cela pour le pire.

Vous pouvez trouver le document suivant: La correspondance d'expressions régulières peut être simple et rapide .

58
NPE

illimité - vous pouvez créer une expression régulière qui ne se termine jamais, sur une chaîne d'entrée vide.

9
Alex Brown

Si vous utilisez une expression régulière (TCS: pas de référence arrière, de concaténation, d'alternance, d'étoile de Kleene) et que l'expression régulière est déjà compilée, alors c'est O (n).

6
royas

Si vous recherchez des limites asymptotiques strictes sur RegEx (sans respecter l'expression elle-même), il n'y en a pas. Comme le souligne Alex, vous pouvez créer une expression régulière qui est O(1) ou une expression régulière qui est Omega (infini). En tant qu'algorithme purement mathématique, un moteur d'expression régulière serait beaucoup trop compliqué d'effectuer toute sorte d'analyse asymptotique formelle (à part le fait qu'une telle analyse serait fondamentalement sans valeur).

Le taux de croissance d'une expression particulière (puisque cela constitue en fait un algorithme de toute façon) serait beaucoup plus significatif, mais pas nécessairement plus facile à analyser.

0
Adam Robinson