Sign in Join
Wiki copytemporary

RegEx packages/pl: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: RegEx packages/pl

OldNewLine
1+Pakiet RegExpr zawiera wiele implementacji wyrażeń regularnych
2+
3+## Regexpr wg Sorokina
4+
5+Jest to najbardziej kompletna implementacja dostępna w packages/regexpr/src/regexpr.pas
6+
7+Przeczytaj stronę wikipedii o wyrażeniach regularnych, aby zapoznać się z tym tematem: [Podstawowe wyrażenia regularne POSIX](https://pl.wikipedia.org/wiki/Wyra%C5%BCenie_regularne)
8+
9+Ten pakiet implementuje podzbiór wyrażeń regularnych Perla, a składnia dostarczona przez pakiet jest udokumentowana tutaj: <https://regex.sorokin.engineer/regex>
10+
11+### Zmiana wielkość liter w trakcie zastępowania
12+
13+Możesz zmienić wielkość liter w znalezionych fragmentach, użyć modyfikatorów w polu zamień na (zmiana wielkości liter działa po pozycji modyfikatora):
14+
15+- \l - Pierwszy znak na małą literę
16+- \L - Wszystkie znaki na małe litery
17+- \u - Pierwszy znak na wielką literę
18+- \U - Wszystkie znaki na wielkie litery
19+
20+Np. jeśli znaleziono słowo, to użyj wyrażenie zastępowania „\L\$0”, aby zmienić słowo na małe litery (tutaj 0\$ jest grupą 0 znalezionego tekstu).
21+
22+Ponadto \n zostanie zastąpiony znakiem końca wiersza (lub sekwencją znaków).
23+
24+### Prosty przykład użycia
25+
26+Użycie RegExpr Sorokina do sprawdzenia, czy wyrażenie jest obecne w ciągu jest bardzo łatwe, po prostu utwórz instancję TRegExpr, a następnie umieść swoje wyrażenie regularne we właściwości TRegExpr.Expression, a następnie użyj metody Exec, aby sprawdzić, czy są jakieś dopasowania dla tego regularnego wyrażenie. Exec zwróci wartość **true**, jeśli wyrażenie pasuje do przekazanego mu ciągu.
27+
28+``` pascal
29+var
30+ RegexObj: TRegExpr;
31+begin
32+ RegexObj := TRegExpr.Create;
33+ RegexObj.Expression := '.*zaloguj.*';
34+ if RegexObj.Exec('Proszę zaloguj się tutaj') then WriteLn('"zaloguj" został znaleziony!');
35+ RegexObj.Free;
36+end;
37+```
38+
39+Dopasowanie podwyrażenia:
40+
41+``` pascal
42+program Project1;
43+
44+uses
45+ RegExpr;
46+
47+var
48+ re: TRegExpr;
49+begin
50+ re := TRegExpr.Create('witaj (.*?)!');
51+ if re.Exec('witaj świecie! witaj pascal!') then
52+ begin
53+ WriteLn(re.Match[1]);
54+ while re.ExecNext do
55+ begin
56+ WriteLn(re.Match[1]);
57+ end;
58+ end;
59+ re.Free;
60+end.
61+```
62+
63+Wynik:
64+
65+ świecie
66+ pascal
67+
68+## FLRE - Wyrażenia regularne Fast Light wg BeRo1985
69+
70+FLRE (F ast L ight R egular E xpressions) jest szybką, bezpieczną i wydajną biblioteką wyrażeń regularnych, która jest zaimplementowana w Object Pascal (Delphi i Free Pascal), ale może być nawet używana z innych językach, takich jak C/C++ i tym podobnych. Obsługuje ciągi Unicode i UTF8.
71+
72+Implementuje wiele najpopularniejszych cech Perla i POSIX, z wyjątkiem funkcji wyrażeń nieregularnych, takich jak [referencje do przodu i zagnieżdżone referencje do tyłu](https://www.regular-expressions.info/backref2.html) i tak dalej, które nie są obsługiwane w FLRE, ale obsługiwane są tylko prawdziwe [referencje "wstecz"](https://www.regular-expressions.info/backref.html), stąd też słowo „Light” w nazwie FLRE. Znajduje również dopasowanie od lewej do pierwszej, to samo dopasowanie, które zrobiłby Perl i PCRE, i może zwrócić informacje o subdopasowaniu. Ale ma także flagę dla eksperymentalnego, jak do tej pory, najbardziej lewostronnego trybu zachowania w stylu POSIX.
73+
74+FLRE jest licencjonowany na licencji LGPL v2.1 z wyjątkiem statycznego linkowania.
75+
76+[repozytorium Github](https://github.com/BeRo1985/flre)
77+
78+### Przykład
79+
80+Implementacja funkcji PHP parse_url (oparta na [parse_url](http://locutus.io/php/url/parse_url/php.js))
81+
82+``` pascal
83+
84+uses Classes, SysUtils, flre;
85+
86+type
87+
88+ RUrlParser = record
89+private
90+ Fcomponents : array[1..13] of string;
91+
92+private
93+ function getComponent( aIndex : integer ) : string;
94+ procedure setComponent( aIndex : integer; const aValue : string );
95+
96+public
97+ function parse( const aUrl : UTF8String ) : boolean;
98+
99+public
100+ property scheme : string index 1 read getComponent write setComponent; // e.g. http
101+ property authority : string index 2 read getComponent;
102+ property userInfo : string index 3 read getComponent;
103+ property user : string index 4 read getComponent;
104+ property pass : string index 5 read getComponent;
105+ property host : string index 6 read getComponent;
106+ property port : string index 7 read getComponent;
107+ property path : string index 9 read getComponent;
108+ property directory : string index 10 read getComponent;
109+ property fileName : string index 11 read getComponent;
110+ property query : string index 12 read getComponent; // after the question mark ?
111+ property fragment : string index 13 read getComponent; // after the hashmark #
112+
113+ end;
114+
115+implementation
116+
117+function RUrlParser.getComponent( aIndex : integer ) : string;
118+begin
119+ Result := Fcomponents[ aIndex ];
120+end;
121+
122+procedure RUrlParser.setComponent( aIndex : integer; const aValue : string );
123+begin
124+ Fcomponents[ aIndex ] := aValue;
125+end;
126+
127+function RUrlParser.parse( const aUrl : UTF8String ) : boolean; overload;
128+var
129+ i : integer;
130+ re : TFLRE;
131+ parts : TFLREMultiStrings;
132+begin
133+ re := TFLRE.Create( '(?:([^:\\/\?#]+):)?'
134+ + '(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?'
135+ + '()'
136+ + '(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\?([^#]*))?(?:#(.*))?)'
137+ , [ rfUTF8 ]
138+ );
139+
140+ parts := nil;
141+ Result := re.UTF8ExtractAll( aUrl, parts );
142+ if ( Result ) then
143+ begin
144+ for i := 1 to Length( parts[0] ) - 1 do
145+ begin
146+ setComponent( i, string( parts[0][i] ) );
147+ end;
148+ end;
149+
150+ // Free regexp memory
151+ for i := 0 to Length( parts ) - 1 do
152+ begin
153+ SetLength( parts[i], 0 );
154+ end;
155+ parts := nil;
156+
157+ re.Free();
158+end;
159+```
160+
161+## Regexpr wg Joosta
162+
163+Regexpr stworzony przez Joosta (moduły oldregexpr.pp i regex.pp) jest bardzo podstawowym modułem wyrażeń regularnych, obsługuje większość wyrażeń regularnych takich jak GNU regexpr. Używa regex do wyszukiwania wzorców wewnątrz łańcucha znaków.
164+
165+Obecny moduł jest daleki do ukończenia i nadal brakuje mu bardzo prostej obsługi składni [POSIX](http://www.opengroup.org/onlinepubs/007908799/xbd/re.html) lub bardziej złożonej składni, takiej jak w [Perl regex](http://www.pcre.org/), [Java Regex](http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html), [Ruby Regex](http://www.jpsoft.com/help/index.htm?regularexpressionsyntax.htm) itp ...
166+
167+Obecnie moduł zawiera 4 funkcje:
168+
169+- GenerateRegExprEngine – Ta funkcja kompiluje wzorzec wyrażenia regularnego.
170+- RegExprPos – Znajduje wzorzec w danym ciągu.
171+- DestroyRegExprEngine – Uwalnia kompilację wzorca
172+- RegExprEscapeStr – Odwołuje się do rezerwowej składni języka wyrażeń regularnych, więc będzie rozumiana jako ciąg znaków zamiast składni regex.
173+
174+Jest też jeden test:
175+
176+- **testreg1** program testowy demonstrujący obsługiwane wyrażenia regularne.
177+
178+## Regexpr wg Floriana
179+
180+To jest najstarsze wdrożenie. Jest obecny w packages/regexpr/src/old i nie jest aktualnie kompilowany przez pliki makefiles, więc nie jest dostępny domyślnie w prekompilowanych wersjach wydań FPC/Lazarus.
181+
182+## Zobacz także
183+
184+- [Porównanie silników wyrażeń regularnych (en)](http://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines)
185+
186+Wróć do [[Package List|Packages List]]
187+
188+---
189+*From the Free Pascal wiki, page "RegEx packages/pl", as it stood on 2022-02-05 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history