]> git.eshelyaron.com Git - emacs.git/commitdiff
(Regexp Special): Nested repetition can be infloop.
authorRichard M. Stallman <rms@gnu.org>
Sat, 22 May 2004 22:05:57 +0000 (22:05 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 22 May 2004 22:05:57 +0000 (22:05 +0000)
lispref/searching.texi

index 9e26363a43a8a5301fa9ec7950bf3a4d0dbfafde..d18587ccecb123c3ee654a59a4836db2f2acd3a6 100644 (file)
@@ -244,13 +244,15 @@ first tries to match all three @samp{a}s; but the rest of the pattern is
 The next alternative is for @samp{a*} to match only two @samp{a}s.  With
 this choice, the rest of the regexp matches successfully.@refill
 
-Nested repetition operators can be extremely slow if they specify
-backtracking loops.  For example, it could take hours for the regular
-expression @samp{\(x+y*\)*a} to try to match the sequence
-@samp{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz}, before it ultimately fails.
-The slowness is because Emacs must try each imaginable way of grouping
-the 35 @samp{x}s before concluding that none of them can work.  To make
-sure your regular expressions run fast, check nested repetitions
+Nested repetition operators can be extremely slow or loop infinitely
+if they use repetition operators inside repetition operators.  For
+example, it could take hours for the regular expression
+@samp{\(x+y*\)*a} to try to match the sequence
+@samp{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz}, before it ultimately
+fails.  Emacs must try each way of grouping the 35 @samp{x}s before
+concluding that none of them can work.  Even worse, @samp{\(x*\)*} can
+match the null string in infinitely many ways, so it causes an
+infinite loop.  To avoid these problems, check nested repetitions
 carefully.
 
 @item @samp{+}