Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
fd714aa3
Commit
fd714aa3
authored
May 03, 2003
by
Martin v. Löwis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Patch #731514: Update recursion documentation to mention simple recursion.
parent
bdf83798
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
11 deletions
+14
-11
Doc/lib/libre.tex
Doc/lib/libre.tex
+14
-11
No files found.
Doc/lib/libre.tex
View file @
fd714aa3
...
...
@@ -896,15 +896,16 @@ The equivalent regular expression would be
(
\S
+) - (
\d
+) errors, (
\d
+) warnings
\end{verbatim}
\leftline
{
\strong
{
Avoiding
backtracking
}}
\leftline
{
\strong
{
Avoiding
recursion
}}
If you create regular expressions that require the engine to perform a
lot
of backtracking, you may encounter a RuntimeError exception with the message
\code
{
maximum recursion limit exceeded
}
.
For example,
If you create regular expressions that require the engine to perform a
lot of recursion, you may encounter a RuntimeError exception with
the message
\code
{
maximum recursion limit
}
exceeded.
For example,
\begin{verbatim}
>>> s = "<" + "that's a very big string!"*1000 + ">"
>>> re.match('<.*?>', s)
>>> import re
>>> s = 'Begin ' + 1000*'a very long string ' + 'end'
>>> re.match('Begin (
\w
| )*? end', s).end()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/local/lib/python2.3/sre.py", line 132, in match
...
...
@@ -912,8 +913,10 @@ Traceback (most recent call last):
RuntimeError: maximum recursion limit exceeded
\end{verbatim}
You can often restructure your regular expression to avoid backtracking.
The above regular expression can be recast as
\regexp
{
\textless
[\textasciicircum \textgreater]
*\textgreater
}
. As a
further benefit, such regular expressions will run faster than their
backtracking equivalents.
You can often restructure your regular expression to avoid recursion.
\versionadded
[Simple uses of the
\regexp
{
*?
}
pattern are now
special-cased to avoid recursion. Thus, the above regular expression
can avoid recursion by being recast as
\regexp
{
Begin [a-zA-Z0-9
_
]*?end
}
.
As a further benefit, such regular expressions will run faster than
their recursive equivalents.]
{
2.3
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment