Sign in Join
Wiki copytemporary

IDE regular expressions/pl: what changed

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

Title: IDE regular expressions/pl

OldNewLine
1+<div style="font-size:1.88em;margin:0.75em 0;">
2+
3+IDE wyrażeń regularnych
4+
5+</div>
6+
7+Pakiet RegExpr zawiera wiele implementacji wyrażeń regularnych
8+
9+## Regexpr wg Sorokina
10+
11+Jest to najbardziej kompletna implementacja dostępna w packages/regexpr/src/regexpr.pas
12+
13+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)
14+
15+Ten pakiet implementuje podzbiór wyrażeń regularnych Perla, a składnia dostarczona przez pakiet jest udokumentowana tutaj: <https://regex.sorokin.engineer/regex>
16+
17+### Zmiana wielkość liter w trakcie zastępowania
18+
19+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):
20+
21+- \l - Pierwszy znak na małą literę
22+- \L - Wszystkie znaki na małe litery
23+- \u - Pierwszy znak na wielką literę
24+- \U - Wszystkie znaki na wielkie litery
25+
26+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).
27+
28+Ponadto \n zostanie zastąpiony znakiem końca wiersza (lub sekwencją znaków).
29+
30+### Prosty przykład użycia
31+
32+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.
33+
34+``` pascal
35+var
36+ RegexObj: TRegExpr;
37+begin
38+ RegexObj := TRegExpr.Create;
39+ RegexObj.Expression := '.*zaloguj.*';
40+ if RegexObj.Exec('Proszę zaloguj się tutaj') then WriteLn('"zaloguj" został znaleziony!');
41+ RegexObj.Free;
42+end;
43+```
44+
45+Dopasowanie podwyrażenia:
46+
47+``` pascal
48+program Project1;
49+
50+uses
51+ RegExpr;
52+
53+var
54+ re: TRegExpr;
55+begin
56+ re := TRegExpr.Create('witaj (.*?)!');
57+ if re.Exec('witaj świecie! witaj pascal!') then
58+ begin
59+ WriteLn(re.Match[1]);
60+ while re.ExecNext do
61+ begin
62+ WriteLn(re.Match[1]);
63+ end;
64+ end;
65+ re.Free;
66+end.
67+```
68+
69+Wynik:
70+
71+ świecie
72+ pascal
73+
74+## FLRE - Wyrażenia regularne Fast Light wg BeRo1985
75+
76+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.
77+
78+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.
79+
80+FLRE jest licencjonowany na licencji LGPL v2.1 z wyjątkiem statycznego linkowania.
81+
82+[repozytorium Github](https://github.com/BeRo1985/flre)
83+
84+### Przykład
85+
86+Implementacja funkcji PHP parse_url (oparta na [parse_url](http://locutus.io/php/url/parse_url/php.js))
87+
88+``` pascal
89+
90+uses Classes, SysUtils, flre;
91+
92+type
93+
94+ RUrlParser = record
95+private
96+ Fcomponents : array[1..13] of string;
97+
98+private
99+ function getComponent( aIndex : integer ) : string;
100+ procedure setComponent( aIndex : integer; const aValue : string );
101+
102+public
103+ function parse( const aUrl : UTF8String ) : boolean;
104+
105+public
106+ property scheme : string index 1 read getComponent write setComponent; // e.g. http
107+ property authority : string index 2 read getComponent;
108+ property userInfo : string index 3 read getComponent;
109+ property user : string index 4 read getComponent;
110+ property pass : string index 5 read getComponent;
111+ property host : string index 6 read getComponent;
112+ property port : string index 7 read getComponent;
113+ property path : string index 9 read getComponent;
114+ property directory : string index 10 read getComponent;
115+ property fileName : string index 11 read getComponent;
116+ property query : string index 12 read getComponent; // after the question mark ?
117+ property fragment : string index 13 read getComponent; // after the hashmark #
118+
119+ end;
120+
121+implementation
122+
123+function RUrlParser.getComponent( aIndex : integer ) : string;
124+begin
125+ Result := Fcomponents[ aIndex ];
126+end;
127+
128+procedure RUrlParser.setComponent( aIndex : integer; const aValue : string );
129+begin
130+ Fcomponents[ aIndex ] := aValue;
131+end;
132+
133+function RUrlParser.parse( const aUrl : UTF8String ) : boolean; overload;
134+var
135+ i : integer;
136+ re : TFLRE;
137+ parts : TFLREMultiStrings;
138+begin
139+ re := TFLRE.Create( '(?:([^:\\/\?#]+):)?'
140+ + '(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?'
141+ + '()'
142+ + '(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\?([^#]*))?(?:#(.*))?)'
143+ , [ rfUTF8 ]
144+ );
145+
146+ parts := nil;
147+ Result := re.UTF8ExtractAll( aUrl, parts );
148+ if ( Result ) then
149+ begin
150+ for i := 1 to Length( parts[0] ) - 1 do
151+ begin
152+ setComponent( i, string( parts[0][i] ) );
153+ end;
154+ end;
155+
156+ // Free regexp memory
157+ for i := 0 to Length( parts ) - 1 do
158+ begin
159+ SetLength( parts[i], 0 );
160+ end;
161+ parts := nil;
162+
163+ re.Free();
164+end;
165+```
166+
167+## Regexpr wg Joosta
168+
169+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.
170+
171+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 ...
172+
173+Obecnie moduł zawiera 4 funkcje:
174+
175+- GenerateRegExprEngine – Ta funkcja kompiluje wzorzec wyrażenia regularnego.
176+- RegExprPos – Znajduje wzorzec w danym ciągu.
177+- DestroyRegExprEngine – Uwalnia kompilację wzorca
178+- 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.
179+
180+Jest też jeden test:
181+
182+- **testreg1** program testowy demonstrujący obsługiwane wyrażenia regularne.
183+
184+## Regexpr wg Floriana
185+
186+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.
187+
188+## Zobacz także
189+
190+- [Porównanie silników wyrażeń regularnych (en)](http://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines)
191+
192+Wróć do [[Package List|Packages List]]
193+
194+---
195+*From the Free Pascal wiki, page "IDE regular expressions/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).*
196+Category: Packages

Back to history