-
Notifications
You must be signed in to change notification settings - Fork 63
/
Copy pathHistory.txt
608 lines (534 loc) · 26.1 KB
/
History.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
---------------------------------------------------------------
History
---------------------------------------------------------------
Legend:
(+) - new feature
(-) - bugfix
(^) - improvement
v. 1.189 2024.06.23
-=- (-) Fix OP_ANY_ML does not need to check for paired-linebreaks. Allow it to
be used in simple loops. By Martin Friebe
v. 1.188 2024.05.28
-=- (-) Fix backward search issues (visible in CudaText app). By Alexey Torgashin.
-=- (^) ExecPos param AOffset default changed from 1 to 0.
v. 1.187 2024.04.17
-=- (^) Return compatability with Delphi 7; add test for Delphi 7. By @ThomasKalten.
v. 1.186 2024.01.10
-=- (^) Fixes and improvements for look-around:
(?=.(capt).)?.*\1 optional look-around was handled incorrectly if it contained code that was later referred.
(?=...)?+ possessive modifiers on look-around were not handled at all.
-=- (^) Tiny optimization for speed.
-=- (-) Fix back-refs if they are nested in the group to which they refer (e.g. \1 in group 1).
By Martin Friebe.
v. 1.182 2023.11.26
-=- (+) Support \K.
-=- (+) Support possessive complex braces: (...){}+.
-=- (^) Some small optimizations.
-=- (-) Bugfixes for look-around.
By Martin Friebe.
v. 1.173 2023.11.11
-=- (+) Allow loops (*/+/{}) on potentially zero-len patterns.
-=- (-) Fixed uninitialized result in Dump().
By Martin Friebe.
v. 1.169 2023.09.16
-=- (^) Removed limit to "Max number of groups" (RegexMaxGroups).
-=- (-) Fixed recursive sub calls. Sub call could return to early.
By Martin Friebe.
v. 1.167 2023.09.13
-=- (+) Added Exec(AOffset, AMatchMustStartBefore: integer).
Limit the search for the first matched position to AMatchMustStartBefore.
-=- (+) Added named group syntax: (?<name>regex).
-=- (+) Added named group reference/call syntax with \g and \k.
-=- (^) Allow underscore in named group name.
-=- (-) Fixed recursive calls accessing outer captures.
-=- (^) Improved speed by reducing clean-up before each match execution.
-=- (-) Fixed literal brace "{" after quantifier.
By Martin Friebe.
v. 1.165 2023.09.08
-=- (+) Added support for \R (any unicode line break).
By Alexey Torgashin.
v. 1.163 2023.08.24
-=- (+) Added full look-ahead support. Added full fixed length look-behind
support.Added limited variable length look-behind support.
-=- (+) Added (?modifier:pattern) support.
-=- (+) Added "property AllowBraceWithoutMin" to allow {,2} instead of {0,2}.
-=- (+) Added "property AllowLiteralBraceWithoutRange" to allow "{" to be
matched as literal, if no range follows.
By Martin Friebe.
v. 1.162 2023.08.21
-=- (-) Fix nested loops using OP_LOOP. Outer loops were run with the counter
of the inner loop.
-=- (^) Removed limit "LoopStackMax = 10" for nested loops (OP_LOOP)
-=- (^) Added indent for RegEx.Dump()
-=- (^) Detect fixed length for in branches, if all paths are of equal length.
-=- (^) Optimization, detect more anchors: ^ \G $ .*
By Martin Friebe.
v. 1.161 2023.08.17
-=- (-) Fix atomic groups. Allow backtracking the entire group.
Make '*','+',... operators aware of the atomic behaviour. Allow nesting.
By Martin Friebe.
v. 1.160 2023.08.15
-=- (+) Add \G for ExecNext to match the position where the previous match ended.
Or in Exec(AOffset) match the AOffset position
By Martin Friebe and Alexey Torgashin.
-=- (+) Add SetInputSubString(Text, Start, Len)
to only match within the selected substring.
By Martin Friebe and Alexey Torgashin.
v. 1.158 2022.05.30
-=- (-) Fix Substitute() result when 'subroutine' (?1) is used.
-=- (-) Fix work of recursion (?R) with back-references.
Reported by Konstantin Vlasov, fixed by Alexey Torgashin.
v. 1.156 2022.05.04
-=- (^) Compatability with Delphi 2007 (maybe D2005 too); fixed compiler warnings.
-=- (^) Renamed compiler define 'Unicode' to 'UnicodeRE' since 'Unicode'
is used by Delphi.
-=- (-) Fixed declaration of PtrInt for Delphi 6 and 7.
By Thomas Mueller (@dummzeuch) and Alexey Torgashin.
v. 1.155 2022.04.28
-=- (-) Fix Substitute() result for not-real group index like '$9' in regex '(b)'.
By Alexey Torgashin.
-=- (-) Fix UnQuoteChar() range check for Substitute() call.
By @delphicz and Alexey T.
v. 1.153 2021.07.04
-=- (^) Compatability with Delphi 7. By Alexey Torgashin.
v. 1.152 2021.05.26
-=- (-) Fix match empty strings (e.g. by '^$'). By Alexey Torgashin.
v. 1.151 2021.03.24
-=- (-) Fix for Substitute method and named groups. By @chrisgch.
v. 1.150 2021.02.08
-=- (-) Setters of Modifier* properties now invalidate the opcode.
v. 1.149 2021.01.08
-=- (-) Allow underscore char to be escaped '\_'. Other word-chars are
not allowed. By Alexey Torgashin.
v. 1.148 2020.09.29
-=- (-) Fixed broken ^ and $ if UseLinePairedBreak=False.
By Alexey Torgashin.
v. 1.147 2020.09.13
-=- (+) Added support for negative lookbehind: (?<!foo)bar.
-=- (^) Added IsFixedLength() to detect regex with fixed length match.
-=- (^) Added IsCompiled().
By Alexey Torgashin.
v. 1.144 2020.09.02
-=- (^) Rework handling of paired CR LF: simplified code, removed
prop LinePairedSeparator (str), added prop UseLinePairedBreak (bool),
it works faster.
-=- (^) Removed prop ReplaceLineBreakFromOS, added instead ReplaceLineBreak.
-=- (+) Added global vars: RegExprUsePairedBreak, RegExprReplaceLineBreak.
-=- (+) Added global vars: RegExprLookaheadIsAtomic, RegExprLookbehindIsAtomic.
By Alexey Torgashin.
v. 1.138 2020.09.01
-=- (+) Added \z which matches at the very ending. \Z is changed: it matches
_also_ before the final line-break. Like in major engines.
-=- (^) Remove ifdef UnicodeWordDetection, because it needs code which
is compiler specific (FPC/Delphi) and hard to support. Unicode is supported
better with existing ifdef FastUnicodeData.
By Alexey Torgashin.
v. 1.130 2020.08.31
-=- (+) Support Perl syntax for named groups: (?'name'expr) and
subroutine calls via (?&name).
-=- (^) Added compile error code for unknown meta-chars (like \X \E \z).
By Alexey Torgashin.
v. 1.128 2020.08.31
-=- (+) Added recursion: (?R) with alias (?0).
-=- (+) Added subroutine calls: (?1) ... (?80), and for named groups: (?P>name).
-=- (+) Added possessive quantifier: a++, a*+, a?+, a{n,m}+ for simple braces.
Not for complex braces yet: (expr){n,m}+.
By Alexey Torgashin.
v. 1.116 2020.08.26
-=- (+) Added ifdef UnicodeEx, to support unicode chars >0xFFFF, e.g.
emojis. Because '.', '\W', '\S' etc must catch 2 WideChars of 1 emoji.
-=- (^) Added ifdef UseLineSep, to enable LineSeparators property.
When turned off (default) it makes Unicode mode faster matching ".".
By Alexey Torgashin.
v. 1.111 2020.08.24
-=- (+) Support atomic groups: (?>...).
-=- (+) Support negative lookahead: aa(?!bb).
-=- (^) Add compile error code for unsupported char after '?' in (?...)
By Alexey Torgashin.
v. 1.106 2020.08.18
-=- (+) Support Unicode categories: \pL \p{L} \p{Lu}, and negative
variant with \P. Both inside char-classes and outside them.
Allowed categories: https://www.compart.com/en/unicode/category/
Requires define FastUnicodeData.
By Alexey Torgashin.
v. 1.101 2020.08.05
-=- (+) Support named groups like in Python: (?P<name>regex), and back-refs
to named groups: (?P=name).
-=- (+) Public method MatchIndexFromName
-=- (+) Public method MatchFromName
-=- (+) Support positive lookahead: foo(?=bar)
-=- (+) Support positive lookbehind: (?<=foo)bar
-=- (+) Support Substitute with named groups: ${name}
Added tests.
By Alexey Torgashin.
v. 0.995 2020.06.21
-=- (^) Deleted prop InvertCase and global variable for this purpose,
seems no one needs it anymore. By Alexey Torgashin.
v. 0.994 2020.06.11
-=- (+) Added define FastUnicodeData, which uses additional arrays
(size=320K) to speedup unicode functions in Unicode mode.
Added unit regexpr_unicodedata.
By Alexey Torgashin.
v. 0.993 2020.06.08
-=- (-) Fixed crash in Substitute() if template str is just '$'.
By Alexey Torgashin.
v. 0.992 2020.06.01
-=- (+) Added backward search possibility: ABackward param in
ExecPrim, ExecPos, ExecNext. It was tested in CudaText editor.
By Alexey Torgashin.
v. 0.991 2020.05.15
-=- (-) Fixed incorrect opcode for correct regex "[.-]".
By Alexey Torgashin.
v. 0.990 2020.05.11
-=- (-) Fixed finding some count of simple chars, e.g. "a+", "a{2,5}".
-=- (-) Fixed PtrInt type for Delphi, should be NativeInt.
By Alexey Torgashin.
v. 0.989 2020.03.26
-=- (-) Fixed compilation on D2009
v. 0.988 2020.02.15
-=- (^) Don't raise error "empty input string", it breaks some apps.
By Alexey Torgashin.
v. 0.987 2020.01.09
-=- (+) Added property SlowChecksSizeMax. Slow checks are used only
in Exec(), and not in Exec(AOffset), ExecPos(), ExecNext.
-=- (^) Fixed big slowdown in Exec/ExecPos (call of IsProgrammOk),
which affected test_benchmark a lot. By Alexey Torgashin.
-=- (^) Raise error if incorrect {} braces were found in expression.
By Alexey Torgashin.
-=- (^) Optimize opcode for [a-c] ranges: avoid redundant EXACTLY.
By Alexey Torgashin.
-=- (^) Added test_benchmark (for FreePascal). Taken from Lazarus forum.
v. 0.975 2019.12.25
-=- (^) Better support NULL chars in InputString.
-=- (^) Improved opcode for EXACTLY: store length to opcode. 15 years old
ToDo item. By Alexey Torgashin.
v. 0.973 2019.12.23
-=- (+) Added ExecPos(AOffset, ATryOnce) - new param ATryOnce is to try
matching at AOffset, without advancing to next positions. Useful for syntax
parsers like in CudaText. By Alexey Torgashin.
-=- (+) Added demo test_dlg to show Dump() result.
-=- (+) Added demo test_dlg_speed which shows goodness of ExecPos(..ATryOnce).
-=- (+) Restored work of FirstCharSet optimization (adapted to new opcode).
Now define UseFirstCharSet is on by default and works in Unicode mode too!
By Alexey Torgashin.
-=- (^) Fixed Dump() for new opcode in char classes.
v. 0.967 2019.12.18
-=- (+) Reworked opcode for char-classes [], now opcode is stored as pairs
(Kind,Data), which allows to have null-char in char-classes, and have
meta-classes \W \D \S \V \H in char-classes. By Alexey Torgashin.
v. 0.964 2019.12.12
-=- (^) Add define UseWordChars (off by default): allows property WordChars.
-=- (^) Add define UseSpaceChars (off by default): allows property SpaceChars.
By Alexey Torgashin.
v. 0.962 2019.12.08
-=- (^) Ifdef UnicodeWordDetection works also on Delphi 2009+.
By Alexey Torgashin.
-=- (^) Property UseUnicodeWordDetection default changed to True.
-=- (^) In Unicode mode on Delphi 2009+, UnicodeString type is used.
-=- (^) Formatted regexpr.pas using Embarcadero Delphi Formatter.exe.
v. 0.960 2019.12.03
-=- (+) Support \V, \H (counterparts to \v, \h). By Alexey Torgashin.
-=- (+) Support control escape sequences \cA...\cZ. By Alexey Torgashin.
-=- (+) Expression can contain NULL chars. By Alexey Torgashin.
v. 0.957 2019.11.23
-=- (+) InputString can contain NULL chars. By Alexey Torgashin.
-=- (^) Rework UpperCase/LowerCase/InvertCase for FPC+Delphi.
By Alexey Torgashin.
v. 0.955 2019.11.20
-=- (+) Support meta chars \v (vertical white space), \h (horizontal
white space). By Alexey Torgashin.
v. 0.954 2019.11.14
-=- (^) Changed type of InputString, Expression from PChar to string.
By Alexey Torgashin.
-=- (+) Support non-capturing groups (?:...). By Alexey Torgashin.
v. 0.952 2004.01.11
-=- (+) FreePascal support, thanks to Yaroslav Romanchenko (SAGE)
v. 0.951 2002.09.29
-=- (+) Defined constant EscChar ('\' by default). Can be usefull for
C++ Builder users who are tired with r.e. like '\\w+\\\\\\w+\\.\\w+'.
Now they can define for example EscChar='/' and write '/w+\/w+/./w+' -
sligtly unusual but more readable.. Suggested by unonimous CPPB user.
-=- (+) Overloaded versions of Exec (only for Delphi 5 and higher).
-=- (-) ExecNext in some cases didn't raise exception if called after
unsuccessful exec*, that is wrong (ExecNext must be called ONLY after
successful Exec* ). Bug reported by Craig A. Peterson
-=- (+) ReplaceEx and overloaded version of Replace - for
complex, context-sensitive replacements. Implemented by Thor Asmund.
-=- (+) Use StrLCopy instead of StpPCopy - in SetExpression() as 0.927
did in SetInputString(). Fixed by Maley, Scott D.
-=- (-) Bug in HyperLinkDecorator.DecorateURLs.
-=- (-) Delphi 2 compatibility restored.
-=- (^) Delphi 7 compatibility tested, Ok.
-=- (+) New demos.
-=- (^) Documentation and distribution package were reorganized.
v. 0.948 2002.01.03
-=- (-) back-offset calculation in UniCode version due to
Delphi's PWideChar subtraction 'feature' (produced
Integer overflow (if Overflow checking is on) and,
sometimes, wrong operation), bug reported by Craig A. Peterson
-=- (-) Bug that was found by Lars Karlslund was fixed by Martin Fuller
(in addition Martin made some excellent source code optimizations).
The bug was: "If I do '(something|^$)' on '' I get false (which is
wrong ...).". Fixed ExecPrim (empty strings were not allowed to pass
thru in UseFirstCharSet mode) and FillFirstCharSet (many bugs).
-=- (-) Visualization bug in Dump method. Fixed by Martin Fuller.
v. 0.947 2001.10.03
-=- (+) Word boundary (\b & \B) metachar
-=- (-) Bug in processing predefined char.classes in non-UseSetOfChar mode
-=- (+) Spanish help - translated by Diego Calp ([email protected]), Argentina
-=- (+) VersionMajor/Minor class method of TRegExpr ;)
-=- (-) Bug in CompileRegExpr, Thanks to Oleg Orlov <[email protected]>
-=- (^) Method RegExprSubExpressions wasn't compatible with D2-D3.
Thanks to Eugene Tarasov for bug report.
-=- (+) Method Replace can now do substitution as well (see documentation)
Thanks to Warren Bare, Ken Friesen and many others who suggested it.
-=- (+) Updated ReplaceRegExpr to use new Replace method functionality
-=- (^) Restored UniCode compatibility lost in some previous version
Thanks to Stephan Klimek for bug report
-=- (^) Updated TestRE project, new examples for Replace with substitution
included.
v. 0.942+ 2001.03.01
-=- (+) Published French help for TRegExpr,
translated by Martin Ledoux
v. 0.942 2001.02.12
-=- (-) Range-check error in DEMO-project (due to bug in
RegExprSubExpressions), Thanks to Juergen Schroth
-=- (^) RegExprSubExpressions - added error codes for "unclosed "[" error
-=- (^) Help file bug fixing
v. 0.941 2001.02.01
-=- (^) Attension! Behaviour of '\w', '\W' was changed! Now it really
match alphanum characters and '_' as described in documentation,
not only alpha as it was before. Thanks to Vadim Alexandrov.
If You want to restore previous behaviour, reassign
RegExprWordChars (exclude '0123456789' from it).
-=- (+) Full compatible with recommended at unicode.org implementation
of modifier /m, including DOS-styled line separators (\r\n) mixed
with Unix styled (\n) - see properties LineSeparators, LinePairedSeparator
-=- (^) Attension! Behaviour of '.' was changed! Now if modifier /s is off
it doesn't match all chars from LineSeparators and LinePairedSeparator (by
default \r and \n)
-=- (^) Attension! To prevent unneeded recompilation of r.e., now assignment
to Expression or changing modifiers doesn't cause immidiate [re]compilation.
So, now You don't get exception while assigning wrong expression, but can
get exception while calling Exec[Next], Substitute, Dump, etc if there
are errors in Expression or other properties.
-=- (+) Non-greedy style iterators (like '*?'), modifier /g.
Implemented with help from Matthew Winter and Filip Jirsбk
-=- (+) /x modifier (eXtended syntax - allow formating r.e., see description
in the help)
-=- (+) Procedure Compile to [re]compile r.e. Usefull for GUI r.e. editors
and so on (to check all properties validity).
-=- (+) FAQ in documentation. I am too lazy to answer to the same
questions again and again :( Please, read the FAQ before sending
question to me!
-=- (^) DEMO project have been significantly improved. Now this is the
real r.e. debugger! Thanks to Jon Smith for his ideas.
-=- (+) function RegExprSubExpressions, usefull for GUI editors of
r.e. (see example of using in TestRExp.dpr project)
-=- (+) HyperLinkDecorator unit - practical example of TRegExpr
using (see description in the help file)
-=- (-) Range checking error in some cases if ComplexBraces defined
Thanks to Juergen Schroth
-=- (^) 'ComplexBraces' now is defined by default
-=- (+) Kit Eason sent to me many examples for 'Syntax' help section
and I decided to complitely rewrite this section. I hope, You'll enjoy
the results ;)
-=- (+) The \A and \Z metacharacters are just like "^" and "$", except
that they won't match multiple times when the modifier /m is used
v. 0.939 2000.10.04
-=- (-) Bug in Substitute method ($10.. didn't work properly)
Thanks to Serge S Klochkovski
v. 0.938 2000.07.23
-=- (^) Exeptions now jump to appropriate source line, not
to Error procedure (I am not quite sure this is safe for
all compiler versions. You can turn it off - remove
reRealExceptionAddr definition below).
-=- (^) Forgotten BSUBEXP[CI] in FillFirstCharSet caused
exeption 'memory corruption' in case if back reference can
be first op, like this: (a)*\1 (first subexpression can be
skipped and we'll start matching with back reference..).
v. 0.937 2000.06.12
-=- (-) Bug in optimization engine (since v.0.934). In some cases
TRegExpr didn't catch right strings.
Thanks to Matthias Fichtner
v. 0.936 2000.04.22
-=- (+) Back references, like <font size=(['"]?)(\d+)\1>, see
manual for details
-=- (+) Wide hex char support, like '\x{263a}'
v. 0.935 2000.04.19 (by Yury Finkel)
-=- (-) fInvertCase now isn't readonly ;)
-=- (-) UniCode mode compiling errors
v. 0.934 2000.04.17
-=- (^) New ranges implementation (range matching now is very fast
- uses one(!) CPU instruction)
-=- (^) Internal p-code structure converted into 32-bits - works
faster and now there is no 64K limit for compiled r.e.
-=- (^) '{m,n}' now use 32-bits arguments (up to 2147483646) - specially
for Dmitry Veprintsev ;)
-=- (^) Ranges now support metachars: [\n-\x0D] -> #10,#11,#12,#13;
Changed '-' processing, now it's like in Perl:
[\d-t] -> '0'..'9','-','t'; []-a] -> ']'..'a'
-=- (-) Bug with \t and etc macro (they worked only in ranges)
Thanks to Yury Finkel
-=- (^) Added new preprocessing optimization (see FirstCharSet).
Incredible fast (!). But be carefull it isn's properly tested.
You can switch it Off - remove UseFirstCharSet definition.
-=- (^) Many other speed optimizations
-=- (-) Case-insensitive mode now support system-defined national
charset (due to bug in v.0.90 .. 0.926 supported only english one)
-=- (^) Case-insensitive mode implemented with InvertCase (param &
result of REChar type) - works 10 .. 100 times faster.
-=- (^) Match and ExecNext interfaces optimized, added IsProgrammOk
by Ralf Junker
-=- (^) Increased NSUBEXP (now 15) and fixed code for this, now you
can simply increase NSUBEXP constant by yourself.
Suggested by Alexander V. Akimov.
-=- (^+) Substitute adapted for NSUBEXP > 10 and significant (!)
optimized, improved error checking.
ATTENTION! Read new Substitute description - syntax was changed !
-=- (+) SpaceChars & WordChars property - now you may change chars
treated as \s & \w. By defauled assigned RegExprSpaceChars/WordChars
-=- (+) Now \s and \w supported in ranges
-=- (-) Infinite loop if end of range=#$FF
Thanks to Andrey Kolegov
-=- (+) Function QuoteRegExprMetaChars (see description)
-=- (+) UniCode support - sorry, works VERY slow (remove '.' from
{.$DEFINE UniCode} after this comment for unicode version).
Implemented by Yury Finkel
v. 0.926 2000.02.26
-=- (-) Old bug derived from H.Spencer sources - SPSTART was
set for '?' and '*' instead of '*', '{m,n}' and '+'.
-=- (-^) Now {m,n} works like Perl's one - error occures only
if m > n or n > BracesMax (BracesMax = 255 in this version).
In other cases (no m or nondigit symbols in m or n values,
or no '}') symbol '{' will be compiled as literal.
Note: so, you must include m value (use {0,n} instead of {,n}).
Note: {m,} will be compiled as {m,BracesMax}.
-=- (-^) CaseInsensitive mode now support ranges
'(?i)[a]' == '[aA]'
-=- (^) Roman-number template in TestRExp ;)
-=- (+^) Beta version of complex-braces - like ((abc){1,2}|d){3}
By default its turned off. If you want take part in beta-testing,
please, remove '.' from {.$DEFINE ComplexBraces} below this comments.
-=- (-^) Removed \b metachar (in Perl it isn't BS as in my implementation,
but word bound)
-=- (+) Add /s modifier. Bu I am not sure that it's ok for Windows.
I implemented it as [^\n] for '.' metachar in non-/s mode.
But lines separated by \n\r in windows. I need you suggestions !
-=- (^) Sorry, but I had to rename Modifiers to ModifierStr
(ModifierS uses for /s now)
v. 0.91 2000.02.02
-=- (^) some changes in documentation and demo-project.
v. 0.90 2000.01.31
-=- (+) implemented braces repetitions {min,max}.
Sorry - only simple cases now - like '\d{2,3}'
or '[a-z1-9]{,7}', but not (abc){2,3} ..
I still too short in time.
Wait for future versions of TRegExpr or
implement it by youself and share with me ;)
-=- (+) implemented case-insensitive modifier and way
to work with other modifiers - see properties
Modifiers, Modifier, ModifierI
and (?ismx-ismx) Perl extension.
You may use global variables RegExpr* for assigning
default modifier values.
-=- (+) property ExtSyntaxEnabled changed to 'r'-modifier
(russian extensions - see documentation)
-=- (+) implemented (?#comment) Perl extension - very hard
and usefull work ;)
-=- (^) property MatchCount renamed to SubExprMatchCount.
Sorry for any inconvenients, but it's because new
version works slightly different and if you used
MatchCount in your programms you have to rethink
it ! (see comments to this property)
-=- (+) add InputString property - stores input string
from last Exec call. You may directly assign values
to this property for using in ExecPos method.
-=- (+) add ExecPos method - for working with assigned
to InputString property. You may use it like this
InputString := AString;
ExecPos;
or this
InputString := AString;
ExecPos (AOffset);
Note: ExecPos without parameter works only in
Delphi 4 or higher.
-=- (+) add ExecNext method - simple and fast (!) way to finding
multiple occurences of r.e. in big input string.
-=- (^) Offset parameter removed from Exec method, if you
used it in your programs, please replace all
Exec (AString, AOffset)
with combination
InputString := AString; ExecPos (AOffset)
Sorry for any inconvenients, but old design
(see v.0.81) was too ugly :(
In addition, multiple Exec calls with same input
string produce fool overhead because each Exec
reallocate input string buffer.
-=- (^) optimized implementation of Substitution,
Replace and Split methods
-=- (-) fixed minor bug - if r.e. compilation raise error
during second pass (!!! I think it's impossible
in really practice), TRegExpr stayed in 'compiled'
state.
-=- (-) fixed bug - Dump method didn't check program existance
and raised 'access violation' if previouse Exec
was finished with error.
-=- (+) changed error handling (see functions Error, ErrorMsg,
LastError, property CompilerErrorPos, type ERegExpr).
-=- (-^) TRegExpr.Replace, Split and ExecNext made a infinite
loop in case of r.e. match empty-string.
Now ExecNext moves by MatchLen if MatchLen <> 0
and by +1 if MatchLen = 0
Thanks to Jon Smith and George Tasker for bugreports.
-=- (-) While playing with null-matchs I discovered, that
null-match at tail of input string is never found.
Well, I fixed this, but I am not sure this is safe
(MatchPos[0]=length(AInputString)+1, MatchLen = 0).
Any suggetions are very appreciated.
-=- (^) Demo project and documentation was upgraded
-=- (^) Documentation and this version was published on my home page
v. 0.81 1999.12.25 // Merry Christmas ! :)
-=- added \s (AnySpace) and \S (NotSpace) meta-symbols
- implemented by Stephan Klimek with minor fixes by AVS
-=- added \f, \a and \b chars (translates into FF, BEL, BS)
-=- removed meta-symbols 'ц' & 'Ц' - sorry for any inconvenients
-=- added Match property (== copy (InputStr, MatchPos [Idx], MatchLen [Idx]))
-=- added extra parameter Offset to Exec method
(thanks to Steve Mudford)
v. 0.7 1999.08.22
-=- fixed bug - in some cases the r.e. [^...]
incorrectly processed (as any symbol)
(thanks to Jan Korycan)
-=- Some changes and improvements in TestRExp.dpr
v. 0.6 1999.08.13 // Friday 13 !
-=- changed header of TRegExpr.Substitute
-=- added Split, Replace & appropriate
global wrappers (thanks to Stephan Klimek for suggetions)
v. 0.5 1999.08.12
-=- TRegExpr.Substitute routine added
-=- Some changes and improvements in TestRExp.dpr
-=- Fixed bug in english version of documentation
(Thanks to Jon Buckheit)
v. 0.4 1999.07.20
-=- Fixed bug with parsing of strings longer then 255 bytes
(thanks to Guido Muehlwitz)
-=- Fixed bug in RegMatch - matches only first occurence of r.e.
(thanks to Stephan Klimek)
v. 0.3 1999.06.13
-=- ExecRegExpr function
v. 0.2 1999.06.10
-=- packed into object-pascal class
-=- code slightly rewriten for pascal
-=- now macro correct proceeded in ranges
-=- r.e.ranges syntax extended for russian letters ranges:
а-я - replaced with all small russian letters (Win1251)
А-Я - replaced with all capital russian letters (Win1251)
а-Я - replaced with all russian letters (Win1251)
-=- added macro '\d' (opcode ANYDIGIT) - match any digit
-=- added macro '\D' (opcode NOTDIGIT) - match not digit
-=- added macro '\w' (opcode ANYLETTER) - match any english letter or '_'
-=- added macro '\W' (opcode NOTLETTER) - match not english letter or '_'
(all r.e.syntax extensions may be turned off by flag ExtSyntax)
v. 0.1 1999.06.09
first version, with bugs, without help => must die :(