1News about PCRE releases
2------------------------
3
4Release 8.02 19-Mar-2010
5------------------------
6
7Another bug-fix release.
8
9
10Release 8.01 19-Jan-2010
11------------------------
12
13This is a bug-fix release. Several bugs in the code itself and some bugs and
14infelicities in the build system have been fixed.
15
16
17Release 8.00 19-Oct-09
18----------------------
19
20Bugs have been fixed in the library and in pcregrep. There are also some
21enhancements. Restrictions on patterns used for partial matching have been
22removed, extra information is given for partial matches, the partial matching
23process has been improved, and an option to make a partial match override a
24full match is available. The "study" process has been enhanced by finding a
25lower bound matching length. Groups with duplicate numbers may now have
26duplicated names without the use of PCRE_DUPNAMES. However, they may not have
27different names. The documentation has been revised to reflect these changes.
28The version number has been expanded to 3 digits as it is clear that the rate
29of change is not slowing down.
30
31
32Release 7.9 11-Apr-09
33---------------------
34
35Mostly bugfixes and tidies with just a couple of minor functional additions.
36
37
38Release 7.8 05-Sep-08
39---------------------
40
41More bug fixes, plus a performance improvement in Unicode character property
42lookup.
43
44
45Release 7.7 07-May-08
46---------------------
47
48This is once again mainly a bug-fix release, but there are a couple of new
49features.
50
51
52Release 7.6 28-Jan-08
53---------------------
54
55The main reason for having this release so soon after 7.5 is because it fixes a
56potential buffer overflow problem in pcre_compile() when run in UTF-8 mode. In
57addition, the CMake configuration files have been brought up to date.
58
59
60Release 7.5 10-Jan-08
61---------------------
62
63This is mainly a bug-fix release. However the ability to link pcregrep with
64libz or libbz2 and the ability to link pcretest with libreadline have been
65added. Also the --line-offsets and --file-offsets options were added to
66pcregrep.
67
68
69Release 7.4 21-Sep-07
70---------------------
71
72The only change of specification is the addition of options to control whether
73\R matches any Unicode line ending (the default) or just CR, LF, and CRLF.
74Otherwise, the changes are bug fixes and a refactoring to reduce the number of
75relocations needed in a shared library. There have also been some documentation
76updates, in particular, some more information about using CMake to build PCRE
77has been added to the NON-UNIX-USE file.
78
79
80Release 7.3 28-Aug-07
81---------------------
82
83Most changes are bug fixes. Some that are not:
84
851. There is some support for Perl 5.10's experimental "backtracking control
86   verbs" such as (*PRUNE).
87
882. UTF-8 checking is now as per RFC 3629 instead of RFC 2279; this is more
89   restrictive in the strings it accepts.
90
913. Checking for potential integer overflow has been made more dynamic, and as a
92   consequence there is no longer a hard limit on the size of a subpattern that
93   has a limited repeat count.
94
954. When CRLF is a valid line-ending sequence, pcre_exec() and pcre_dfa_exec()
96   no longer advance by two characters instead of one when an unanchored match
97   fails at CRLF if there are explicit CR or LF matches within the pattern.
98   This gets rid of some anomalous effects that previously occurred.
99
1005. Some PCRE-specific settings for varying the newline options at the start of
101   a pattern have been added.
102
103
104Release 7.2 19-Jun-07
105---------------------
106
107WARNING: saved patterns that were compiled by earlier versions of PCRE must be
108recompiled for use with 7.2 (necessitated by the addition of \K, \h, \H, \v,
109and \V).
110
111Correction to the notes for 7.1: the note about shared libraries for Windows is
112wrong. Previously, three libraries were built, but each could function
113independently. For example, the pcreposix library also included all the
114functions from the basic pcre library. The change is that the three libraries
115are no longer independent. They are like the Unix libraries. To use the
116pcreposix functions, for example, you need to link with both the pcreposix and
117the basic pcre library.
118
119Some more features from Perl 5.10 have been added:
120
121  (?-n) and (?+n) relative references for recursion and subroutines.
122
123  (?(-n) and (?(+n) relative references as conditions.
124
125  \k{name} and \g{name} are synonyms for \k<name>.
126
127  \K to reset the start of the matched string; for example, (foo)\Kbar
128  matches bar preceded by foo, but only sets bar as the matched string.
129
130  (?| introduces a group where the capturing parentheses in each alternative
131  start from the same number; for example, (?|(abc)|(xyz)) sets capturing
132  parentheses number 1 in both cases.
133
134  \h, \H, \v, \V match horizontal and vertical whitespace, respectively.
135
136
137Release 7.1 24-Apr-07
138---------------------
139
140There is only one new feature in this release: a linebreak setting of
141PCRE_NEWLINE_ANYCRLF. It is a cut-down version of PCRE_NEWLINE_ANY, which
142recognizes only CRLF, CR, and LF as linebreaks.
143
144A few bugs are fixed (see ChangeLog for details), but the major change is a
145complete re-implementation of the build system. This now has full Autotools
146support and so is now "standard" in some sense. It should help with compiling
147PCRE in a wide variety of environments.
148
149NOTE: when building shared libraries for Windows, three dlls are now built,
150called libpcre, libpcreposix, and libpcrecpp. Previously, everything was
151included in a single dll.
152
153Another important change is that the dftables auxiliary program is no longer
154compiled and run at "make" time by default. Instead, a default set of character
155tables (assuming ASCII coding) is used. If you want to use dftables to generate
156the character tables as previously, add --enable-rebuild-chartables to the
157"configure" command. You must do this if you are compiling PCRE to run on a
158system that uses EBCDIC code.
159
160There is a discussion about character tables in the README file. The default is
161not to use dftables so that that there is no problem when cross-compiling.
162
163
164Release 7.0 19-Dec-06
165---------------------
166
167This release has a new major number because there have been some internal
168upheavals to facilitate the addition of new optimizations and other facilities,
169and to make subsequent maintenance and extension easier. Compilation is likely
170to be a bit slower, but there should be no major effect on runtime performance.
171Previously compiled patterns are NOT upwards compatible with this release. If
172you have saved compiled patterns from a previous release, you will have to
173re-compile them. Important changes that are visible to users are:
174
1751. The Unicode property tables have been updated to Unicode 5.0.0, which adds
176   some more scripts.
177
1782. The option PCRE_NEWLINE_ANY causes PCRE to recognize any Unicode newline
179   sequence as a newline.
180
1813. The \R escape matches a single Unicode newline sequence as a single unit.
182
1834. New features that will appear in Perl 5.10 are now in PCRE. These include
184   alternative Perl syntax for named parentheses, and Perl syntax for
185   recursion.
186
1875. The C++ wrapper interface has been extended by the addition of a
188   QuoteMeta function and the ability to allow copy construction and
189   assignment.
190
191For a complete list of changes, see the ChangeLog file.
192
193
194Release 6.7 04-Jul-06
195---------------------
196
197The main additions to this release are the ability to use the same name for
198multiple sets of parentheses, and support for CRLF line endings in both the
199library and pcregrep (and in pcretest for testing).
200
201Thanks to Ian Taylor, the stack usage for many kinds of pattern has been
202significantly reduced for certain subject strings.
203
204
205Release 6.5 01-Feb-06
206---------------------
207
208Important changes in this release:
209
2101. A number of new features have been added to pcregrep.
211
2122. The Unicode property tables have been updated to Unicode 4.1.0, and the
213   supported properties have been extended with script names such as "Arabic",
214   and the derived properties "Any" and "L&". This has necessitated a change to
215   the interal format of compiled patterns. Any saved compiled patterns that
216   use \p or \P must be recompiled.
217
2183. The specification of recursion in patterns has been changed so that all
219   recursive subpatterns are automatically treated as atomic groups. Thus, for
220   example, (?R) is treated as if it were (?>(?R)). This is necessary because
221   otherwise there are situations where recursion does not work.
222
223See the ChangeLog for a complete list of changes, which include a number of bug
224fixes and tidies.
225
226
227Release 6.0 07-Jun-05
228---------------------
229
230The release number has been increased to 6.0 because of the addition of several
231major new pieces of functionality.
232
233A new function, pcre_dfa_exec(), which implements pattern matching using a DFA
234algorithm, has been added. This has a number of advantages for certain cases,
235though it does run more slowly, and lacks the ability to capture substrings. On
236the other hand, it does find all matches, not just the first, and it works
237better for partial matching. The pcrematching man page discusses the
238differences.
239
240The pcretest program has been enhanced so that it can make use of the new
241pcre_dfa_exec() matching function and the extra features it provides.
242
243The distribution now includes a C++ wrapper library. This is built
244automatically if a C++ compiler is found. The pcrecpp man page discusses this
245interface.
246
247The code itself has been re-organized into many more files, one for each
248function, so it no longer requires everything to be linked in when static
249linkage is used. As a consequence, some internal functions have had to have
250their names exposed. These functions all have names starting with _pcre_. They
251are undocumented, and are not intended for use by outside callers.
252
253The pcregrep program has been enhanced with new functionality such as
254multiline-matching and options for output more matching context. See the
255ChangeLog for a complete list of changes to the library and the utility
256programs.
257
258
259Release 5.0 13-Sep-04
260---------------------
261
262The licence under which PCRE is released has been changed to the more
263conventional "BSD" licence.
264
265In the code, some bugs have been fixed, and there are also some major changes
266in this release (which is why I've increased the number to 5.0). Some changes
267are internal rearrangements, and some provide a number of new facilities. The
268new features are:
269
2701. There's an "automatic callout" feature that inserts callouts before every
271   item in the regex, and there's a new callout field that gives the position
272   in the pattern - useful for debugging and tracing.
273
2742. The extra_data structure can now be used to pass in a set of character
275   tables at exec time. This is useful if compiled regex are saved and re-used
276   at a later time when the tables may not be at the same address. If the
277   default internal tables are used, the pointer saved with the compiled
278   pattern is now set to NULL, which means that you don't need to do anything
279   special unless you are using custom tables.
280
2813. It is possible, with some restrictions on the content of the regex, to
282   request "partial" matching. A special return code is given if all of the
283   subject string matched part of the regex. This could be useful for testing
284   an input field as it is being typed.
285
2864. There is now some optional support for Unicode character properties, which
287   means that the patterns items such as \p{Lu} and \X can now be used. Only
288   the general category properties are supported. If PCRE is compiled with this
289   support, an additional 90K data structure is include, which increases the
290   size of the library dramatically.
291
2925. There is support for saving compiled patterns and re-using them later.
293
2946. There is support for running regular expressions that were compiled on a
295   different host with the opposite endianness.
296
2977. The pcretest program has been extended to accommodate the new features.
298
299The main internal rearrangement is that sequences of literal characters are no
300longer handled as strings. Instead, each character is handled on its own. This
301makes some UTF-8 handling easier, and makes the support of partial matching
302possible. Compiled patterns containing long literal strings will be larger as a
303result of this change; I hope that performance will not be much affected.
304
305
306Release 4.5 01-Dec-03
307---------------------
308
309Again mainly a bug-fix and tidying release, with only a couple of new features:
310
3111. It's possible now to compile PCRE so that it does not use recursive
312function calls when matching. Instead it gets memory from the heap. This slows
313things down, but may be necessary on systems with limited stacks.
314
3152. UTF-8 string checking has been tightened to reject overlong sequences and to
316check that a starting offset points to the start of a character. Failure of the
317latter returns a new error code: PCRE_ERROR_BADUTF8_OFFSET.
318
3193. PCRE can now be compiled for systems that use EBCDIC code.
320
321
322Release 4.4 21-Aug-03
323---------------------
324
325This is mainly a bug-fix and tidying release. The only new feature is that PCRE
326checks UTF-8 strings for validity by default. There is an option to suppress
327this, just in case anybody wants that teeny extra bit of performance.
328
329
330Releases 4.1 - 4.3
331------------------
332
333Sorry, I forgot about updating the NEWS file for these releases. Please take a
334look at ChangeLog.
335
336
337Release 4.0 17-Feb-03
338---------------------
339
340There have been a lot of changes for the 4.0 release, adding additional
341functionality and mending bugs. Below is a list of the highlights of the new
342functionality. For full details of these features, please consult the
343documentation. For a complete list of changes, see the ChangeLog file.
344
3451. Support for Perl's \Q...\E escapes.
346
3472. "Possessive quantifiers" ?+, *+, ++, and {,}+ which come from Sun's Java
348package. They provide some syntactic sugar for simple cases of "atomic
349grouping".
350
3513. Support for the \G assertion. It is true when the current matching position
352is at the start point of the match.
353
3544. A new feature that provides some of the functionality that Perl provides
355with (?{...}). The facility is termed a "callout". The way it is done in PCRE
356is for the caller to provide an optional function, by setting pcre_callout to
357its entry point. To get the function called, the regex must include (?C) at
358appropriate points.
359
3605. Support for recursive calls to individual subpatterns. This makes it really
361easy to get totally confused.
362
3636. Support for named subpatterns. The Python syntax (?P<name>...) is used to
364name a group.
365
3667. Several extensions to UTF-8 support; it is now fairly complete. There is an
367option for pcregrep to make it operate in UTF-8 mode.
368
3698. The single man page has been split into a number of separate man pages.
370These also give rise to individual HTML pages which are put in a separate
371directory. There is an index.html page that lists them all. Some hyperlinking
372between the pages has been installed.
373
374
375Release 3.5 15-Aug-01
376---------------------
377
3781. The configuring system has been upgraded to use later versions of autoconf
379and libtool. By default it builds both a shared and a static library if the OS
380supports it. You can use --disable-shared or --disable-static on the configure
381command if you want only one of them.
382
3832. The pcretest utility is now installed along with pcregrep because it is
384useful for users (to test regexs) and by doing this, it automatically gets
385relinked by libtool. The documentation has been turned into a man page, so
386there are now .1, .txt, and .html versions in /doc.
387
3883. Upgrades to pcregrep:
389   (i)   Added long-form option names like gnu grep.
390   (ii)  Added --help to list all options with an explanatory phrase.
391   (iii) Added -r, --recursive to recurse into sub-directories.
392   (iv)  Added -f, --file to read patterns from a file.
393
3944. Added --enable-newline-is-cr and --enable-newline-is-lf to the configure
395script, to force use of CR or LF instead of \n in the source. On non-Unix
396systems, the value can be set in config.h.
397
3985. The limit of 200 on non-capturing parentheses is a _nesting_ limit, not an
399absolute limit. Changed the text of the error message to make this clear, and
400likewise updated the man page.
401
4026. The limit of 99 on the number of capturing subpatterns has been removed.
403The new limit is 65535, which I hope will not be a "real" limit.
404
405
406Release 3.3 01-Aug-00
407---------------------
408
409There is some support for UTF-8 character strings. This is incomplete and
410experimental. The documentation describes what is and what is not implemented.
411Otherwise, this is just a bug-fixing release.
412
413
414Release 3.0 01-Feb-00
415---------------------
416
4171. A "configure" script is now used to configure PCRE for Unix systems. It
418builds a Makefile, a config.h file, and the pcre-config script.
419
4202. PCRE is built as a shared library by default.
421
4223. There is support for POSIX classes such as [:alpha:].
423
4245. There is an experimental recursion feature.
425
426----------------------------------------------------------------------------
427          IMPORTANT FOR THOSE UPGRADING FROM VERSIONS BEFORE 2.00
428
429Please note that there has been a change in the API such that a larger
430ovector is required at matching time, to provide some additional workspace.
431The new man page has details. This change was necessary in order to support
432some of the new functionality in Perl 5.005.
433
434          IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.00
435
436Another (I hope this is the last!) change has been made to the API for the
437pcre_compile() function. An additional argument has been added to make it
438possible to pass over a pointer to character tables built in the current
439locale by pcre_maketables(). To use the default tables, this new arguement
440should be passed as NULL.
441
442          IMPORTANT FOR THOSE UPGRADING FROM VERSION 2.05
443
444Yet another (and again I hope this really is the last) change has been made
445to the API for the pcre_exec() function. An additional argument has been
446added to make it possible to start the match other than at the start of the
447subject string. This is important if there are lookbehinds. The new man
448page has the details, but you just want to convert existing programs, all
449you need to do is to stick in a new fifth argument to pcre_exec(), with a
450value of zero. For example, change
451
452  pcre_exec(pattern, extra, subject, length, options, ovec, ovecsize)
453to
454  pcre_exec(pattern, extra, subject, length, 0, options, ovec, ovecsize)
455
456****
457