RegExp Studio
TRegExpr v.0.942 - Delphi Regular Expressions

Bulgarian
English
French
German
Russian
Spanish
About TRegExpr Предназначение Installation Инсталиране Regular Expressions Syntax Синтаксис TRegExpr Interface Интерфейс FAQ ЧЕВО TRegExpr usage demos Демо Author Автор  
Èíòåðôåéñ íà TRegExpr

Ïóáëè÷íè ìåòîäè è ñâîéñòâà íà TRegExpr
:

property Expression : string
Ïðåäñòàâëÿâà ñàìèÿò RE.
Ñ öåë îïòèìèçàöèÿ, ïðèñâîÿâàòå RE íà òîâà ñâîéñòâî, TRegExpr àâòîìàòè÷íî ãî êîìïèëèðà â 'Ð-êîä' (Ìîæå äà ãî âèäèòå ñ ïîìîùòà íà ìåòîäà Dump) è ãî çàïèñâà âúâ âúòðåøíèòå ñè ñòðóêòóðè. Èñòèíñêî [ðå]êîìïèëèðàíå ñå ïðàâè ñàìî êîãàòî âúçíèêíå íóæäà îò òîâà
ïðè èçâèêâàíå íà Exec[Next], Substitute, Dump è ò.í. è ñàìî àêî ñàìèÿò èçðàç èëè äðóãî ñâîéñòâî, âëèÿåùè âúðõó Ð-êîäà áúäàò ïðîìåíåíè ñëåä ïîñëåäíàòà [ðå]êîìïèëàöèÿ.
 ñëó÷àé íà ãðåøêà ïðè [ðå]êîìïèëèðàíå, ñå èçâèêâà ìåòîäúò Error (ïî ïîäðàçáèðàíå ìåòîäúò Error ïðåäèçâèêâà èçêëþ÷åíèå
âèæ ïî-äîëó)

property ModifierStr : string
Çà ïðîâåðêà/óñòàíîâÿâàíå íà ñòîéíîñòèòå íà
ìîäèôèêàòîðèòå íà RE. Ôîðìàòúò íà ñòðèíãà å ïîäîáåí íà òîçè ïðè ìîäèôèêàòîðèòå (?ismx-ismx). Íàïðèìåð, ModifierStr := 'i-x' ùå âêëþ÷è ìîäèôèêàòîðà /i, ùå èçêëþ÷è /x è íÿìà äà ïðîìåíè îñòàíàëèòå.
Àêî ñå îïèòàòå äà çàäàäåòå íåïîçíàò ìîäèôèêàòîð, ùå ñå èçâèêà ìåòîäúò Error (ïî ïîäðàçáèðàíå ìåòîäúò Error ïðåäèçâèêâà èçêëþ÷åíèå ERegExpr).

property ModifierI : boolean
Ìîäèôèêàòîð /i ïðîâåðêà áåç îò÷èòàíå ãëàâíè/ìàëêè áóêâè. Ïðèåìà íà÷àëíà ñòîéíîñò îò RegExprModifierI.

property ModifierR : boolean
Ìîäèôèêàòîð /r èçïîëçâàíå íà äèàïàçîíè çà ðóñêè åçèê. Ïðèåìà íà÷àëíà ñòîéíîñò îò RegExprModifierR.

property ModifierS : boolean
Ìîäèôèêàòîð /s - '.' ñúâïàäà ñ âñåêè ñèìâîë (èíà÷å íå ñúâïàäà ñ LineSeparators è LinePairedSeparator). Ïðèåìà íà÷àëíà ñòîéíîñò îò RegExprModifierS.

property ModifierG : boolean;
Ìîäèôèêàòîð /g - èçêëþ÷âàíåòî íà /g ïðåâêëþ÷âà âñè÷êè îïåðàöèè â "íåæàäåí" ñòèë òàêà, ÷å àêî ModifierG = False, òî âñè÷êè '*' ðàáîòÿò êàòî '*?', âñè÷êè '+' êàòî '+?' è ò.í. Ïðèåìà íà÷àëíà ñòîéíîñò îò RegExprModifierG.

property ModifierM : boolean;
Ìîäèôèêàòîð /m - òðåòèðà ñòðèíãà êàòî ñúñòàâåí îò ìíîãî ðåäîâå. Ò.å. çàäàâà çà `^' è `$' âìåñòî äà ñúâïàäàò ñúñ ñàìîòî íà÷àëî èëè êðàé íà ñòðèíãà, äà ñúâïàäàò ñ íà÷àëîòî è êðàÿ íà âñÿêè ðåä âúòðå â ñàìèÿ ñòðèíã. Ïðèåìà íà÷àëíà ñòîéíîñò îò RegExprModifierM.

property ModifierX : boolean;
Ìîäèôèêàòîð /x eXtended ñèíòàêñèñ. Ïðèåìà íà÷àëíà ñòîéíîñò îò RegExprModifierX.

function Exec (const AInputString : string) : boolean;
Ïðîâåðêà çà ñúâïàäåíèå íà RE ñ âõîäíèÿ ñòðèíã AInputString
!!! Exec çàïàçâà AInputString â ñâîéñòâîòî InputString

function ExecNext : boolean;
òúðñè çà ñëåäâàùî ñúâïàäåíèå:
Exec (AString); ExecNext;
ðàáîòè ïî ñúùèÿ íà÷èí, êàêòî
Exec (AString);
if MatchLen [0] = 0 then ExecPos (MatchPos [0] + 1)
else ExecPos (MatchPos [0] + MatchLen [0]);
íî å äîñòà ïî-ïðîñòî çà ðàçáèðàíå !

function ExecPos (AOffset: integer = 1) : boolean;
Òúðñè çà ñúâïàäåíèå íà RE ñ âõîäíèÿ ñòðèíã, çàïî÷âàéêè îò ïîçèöèÿ AOffset
(AOffset=1
ïúðâèÿò ñèìâîë íà InputString)

property InputString : string;
òåêóùèÿò âõîäåí ñòðèíã (ïðèñâîåí ÿâíî èëè îò ïîñëåäíèÿ Exec).
ñÿêî ïðèñâîÿâàíå íà ñòðèíã íà òîâà ñâîéñòâî èçòðèâà ñòîéíîñòèòå íà ñâîéñòâàòà Match* !

function Substitute (const ATemplate : string) : string;
Âðúùà ñòðèíãà Atemplate, â êîéòî '$&' èëè '$0' å çàìåíåíî ñ öåëèÿ RE, à '$n' ñå çàìåíÿ ñ ïîäèçðàçà ñ íîìåð n.
Ñëåä âåðñèÿ v.0.929 ñå èçïîëçâà '$' âìåñòî '\' (çà áúäåùè ðàçøèðåíèÿ è çà ïî-ãîëÿìà Perl-ñúâìåñòèìîñò) è ïðèåìà ïîâå÷å îò åäíà öèôðà.
Àêî èñêàòå äà çàïèøåòå ïðîñòî ñèìâîëèòå '$' èëè '\', çàïèøåòå ïðåä òÿõ '\'
Ïðèìåð: '1\$ is $2\\rub\\' -> '1$ is <Match[2]>\rub\'
Àêî èñêàòå äà çàïèøåòå îáèêíîâåíà öèôðà ñëåä '$n', ùå òðÿáâà äà çàãðàäèòå n ñ ôèãóðíè ñêîáè '{}'.
Ïðèìåð: 'a$12bc' -> 'a<Match[12]>bc', a${1}2bc' -> 'a<Match[1]>2bc'.

procedure Split (AInputStr : string; APieces : TStrings);
Ðàçäåëÿ AInputStr íà ïàð÷åòà â APieces ñïîðåä ñðåùàíåòî íà RE. Èçïîëçâà Exec [Next].

function Replace (AInputStr : RegExprString; const AReplaceStr : RegExprString; AUseSubstitution : boolean = False) : RegExprString;
Âðúùà AinputStr, â êîéòî ñðåùàíèÿòà íà RE ñà çàìåíåíè ñ AreplaceStr. Àêî AUseSubstitution å true, òîãàâà AReplaceStr ùå ñå èçïîëçâà êàòî øàáëîí çà ìåòîäèòå Substitution.
Ïðèìåð:
Expression := '({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*';
Replace ('BLOCK( test1)', 'def "$1" value "$2"', True);
ùå âúðíå: def 'BLOCK' value 'test1'
Replace ('BLOCK( test1)', 'def "$1" value "$2"', False)
ùå âúðíå: def "$1" value "$2"
Èçïîëçâà Exec[Next]

function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr : string; AUseSubstitution : boolean = False) : string;
Âðúùà AinputStr, â êîéòî ñðåùàíèÿòà íà RE ñà çàìåíåíè ñ AreplaceStr. Àêî AUseSubstitution å true, òîãàâà AReplaceStr ùå ñå èçïîëçâà êàòî øàáëîí çà ìåòîäèòå Substitution.
Ïðèìåð:
ReplaceRegExpr ('({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*',
'BLOCK( test1)', 'def "$1" value "$2"', True)
ùå âúðíå: def 'BLOCK' value 'test1'
ReplaceRegExpr ('({-i}block|var)\s*\(\s*([^ ]*)\s*\)\s*',
'BLOCK( test1)', 'def "$1" value "$2"')
ùå âúðíå: def "$1" value "$2"

property SubExprMatchCount : integer; // ReadOnly
Âðúùà áðîÿ íà ïîäèçðàçèòå, íàìåðåíè ïðè ïîñëåäíîòî èçâèêâàíå íà Exec*.
Àêî íÿìà ïîäèçðàçè, à å íàìåðåí ñàìî öåëèÿò èçðàç (Exec* å âúðíàëà True), òî SubExprMatchCount=0, à àêî íå ñà íàìåðåíè íèòî ïîäèçðàçè, íèòî öåëèÿ RE (Exec* å âúðíàëà false), òî SubExprMatchCount=-1.
Çàáåëåæåòå, ÷å íÿêîè ïîäèçðàçè ìîæå è äà íå áúäàò íàìåðåíè è çà òÿõ MathPos=MatchLen= -1 è Match=''.
Ïðèìåð: Èçðàç := '(1)?2(3)?';
Exec ('123'): SubExprMatchCount=2, Match[0]='123', [1]='1', [2]='3'
Exec ('12'): SubExprMatchCount=1, Match[0]='12', [1]='1'
Exec ('23'): SubExprMatchCount=2, Match[0]='23', [1]=", [2]='3'
Exec ('2'): SubExprMatchCount=0, Match[0]='2'
Exec ('7') - âðúùà False: SubExprMatchCount=-1

property MatchPos [Idx : integer] : integer; // ReadOnly
ïîçèöèÿ íà íàìåðåíèÿ ïîäèçðàç. #Idx å íîìåðà íà ïîäèçðàçà â ïîñëåäíèÿ ñòðèíã íà Exec*. Ïúðâèÿò ïîäèçðàç èìà Idx=1, ïîñëåäíèÿ - MatchCount, öåëèÿ èçðàç èìà Idx=0.
Âðúùà -1 àêî â èçðàçà íÿìà òàêúâ ïîäèçðàç èëè àêî òîé íå å íàìåðåí.

property MatchLen [Idx : integer] : integer; // ReadOnly
äúëæèíà íà íàìåðåíèÿ ïîäèçðàç. #Idx å íîìåðà íà ïîäèçðàçà â ïîñëåäíèÿ ñòðèíã íà Exec*. Ïúðâèÿò ïîäèçðàç èìà Idx=1, ïîñëåäíèÿ - MatchCount, öåëèÿ èçðàç èìà Idx=0.
Âðúùà -1 àêî â èçðàçà íÿìà òàêúâ ïîäèçðàç èëè àêî òîé íå å íàìåðåí.

property Match [Idx : integer] : string; // ReadOnly
== copy (InputString, MatchPos [Idx], MatchLen [Idx])
Âðúùà '' àêî â èçðàçà íÿìà òàêúâ ïîäèçðàç èëè àêî òîé íå å íàìåðåí.

function LastError : integer;
Âðúùà íîìåðà íà ïîñëåäíàòà ãðåøêà èëè 0 àêî íÿìà ãðåøêè (íåèçïîëçâàåì àêî ìåòîäúò Error ãåíåðèðà èçêëþ÷åíèå) è óñòàíîâÿâà âúòðåøíèÿ ñòàòóñ â 0 (íÿìà ãðåøêè).

function ErrorMsg (AErrorID : integer) : string; virtual;
Âðúùà ñúîáùåíèå çà ãðåøêà ñ íîìåð = AErrorID.

property CompilerErrorPos : integer; // ReadOnly
Âðúùà ïîçèöèÿòà â èçðàçà, êúäåòî êîìïèëàòîðúò å ñïðÿë.
Ïîëåçíî ïðè äèàãíîñòèêà íà ãðåøêè

property SpaceChars : RegExprString
Ñúäúðæà ñèìâîëèòå, òðåòèðàíè êàòî \s (èíèöèàëèçèðà ñå ñ ãëîáàëíàòà êîíñòàíòà RegExprSpaceChars.

property WordChars : RegExprString;
Ñúäúðæà ñèìâîëèòå, òðåòèðàíè êàòî \w (èíèöèàëèçèðà ñå ñ ãëîáàëíàòà êîíñòàíòà RegExprWordChars.

property LineSeparators : RegExprString
ðàçäåëèòåëèòå íà ðåäîâå (êàòî \n â Unix), (èíèöèàëèçèðà ñå ñ ãëîáàëíàòà êîíñòàíòà RegExprLineSeparators.
Âèæ ñúùî
çà ðàçäåëèòåëèòå

property LinePairedSeparator : RegExprString
ñäâîåíè ðàçäåëèòåëè íà ðåäîâå (êàòî \r\n â DOS è Windows).
Òðÿáâà äà ñúäúðæà òî÷íî äâà ñèìâîëà èëè äà íå ñúäúðæà íèùî (èíèöèàëèçèðà ñå ñ ãëîáàëíàòà êîíñòàíòà RegExprLinePairedSeparator).
Âèæ ñúùî
çà ðàçäåëèòåëèòå

Íàïðèìåð, àêî èìàòå íóæäà îò Unix-ñòèë, çàäàéòå LineSeparators := #$a (ñèìâîë çà íîâ ðåä) è LinePairedSeparator := '' (ïðàçåí ñòðèíã), à àêî èñêàòå äà îáðàáîòâàòå ðàçäåëèòåëÿ \x0D\x0A, íî íå \x0D èëè \x0A, çàäàéòå LineSeparators := '' (ïðàçåí ñòðèíã) è LinePairedSeparator := #$d#$a.

Ïî ïîäðàçáèðàíå ñå èçïîëçâà 'ñìåñåí' ðåæèì (äåôèíèðàí â ãëîáàëíèòå êîíñòàíòè RegExprLine[Paired]Separator[s]): LineSeparators := #$d#$a; LinePairedSeparator := $#d#$a. Äåéñòâèåòî íà òîçè ðåæèì å ïîäðîáíî îáÿñíåíî â ðàçäåëà, êàñàåù
ñèíòàêñèñà.

class function InvertCaseFunction (const Ch : REChar) : REChar;
Êîíâåðòèðà Ch â ãîðåí ðåãèñòúð (àêî å áèë â äîëåí) èëè â äîëåí ðåãèñòúð (àêî å áèë â ãîðåí), êàòî èçïîëçâà ñèñòåìíèòå íàñòðîéêè.

property InvertCase : TRegExprInvertCaseFunction;
Àêî èñêàòå äà ðàáîòèòå ñúñ çàâèñèìîñò îò ðåãèñòúðà íà ñèìâîëèòå, óñòàíîâåòå òîâà ñâîéñòâî äà ñî÷è RegExprInvertCaseFunction (ïî ïîäðàçáèðàíå ñî÷è InvertCaseFunction)

procedure Compile;
[Ðå]êîìïèëèðà RE. Ïîëåçíà çà ðåäàêòîðè, èçïîëçâàùè RE â GUI (çà ïðîâåðêà íà âàëèäíîñòòà íà âñè÷êè ñâîéñòâà).

function Dump : string;
ïîêàçâà êîìïèëèðàíèÿò èçðàç â ïî-ïîäðîáåí âèä.

class function VersionMajor: integer;
class function VersionMinor: integer;
Âðúùàò ãëàâíàòà è âòîðîñòåïåííàòà âåðñèÿ, íàïðèìåð çà v. 0.944 VersionMajor = 0 è VersionMinor = 944


Ãëîáàëíè êîíñòàíòè

Ñòîéíîñòè ïî ïîäðàçáèðàíå íà ìîäèôèêàòîðèòå:
RegExprModifierI : boolean = False;      // TRegExpr.ModifierI
RegExprModifierR : boolean = True;      // TRegExpr.ModifierR
RegExprModifierS : boolean = True;      // TRegExpr.ModifierS
RegExprModifierG : boolean = True;      // TRegExpr.ModifierG
RegExprModifierM : boolean = False;      // TRegExpr.ModifierM
RegExprModifierX : boolean = False;      // TRegExpr.ModifierX

RegExprSpaceChars : RegExprString = ' '#$9#$A#$D#$C;
// ñòîéíîñò ïî ïîäðàçáèðàíå çà ñâîéñòâîòî SpaceChars

RegExprWordChars : RegExprString =
'0123456789'
+ 'abcdefghijklmnopqrstuvwxyz'
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_';
// ñòîéíîñò ïî ïîäðàçáèðàíå çà ñâîéñòâîòî WordChars

RegExprLineSeparators : RegExprString =
#$d#$a{$IFDEF UniCode}#$b#$c#$2028#$2029#$85{$ENDIF};
// ñòîéíîñò ïî ïîäðàçáèðàíå çà ñâîéñòâîòî LineSeparators
RegExprLinePairedSeparator : RegExprString =
#$d#$a;
// ñòîéíîñò ïî ïîäðàçáèðàíå çà ñâîéñòâîòî LinePairedSeparator

RegExprInvertCaseFunction : TRegExprInvertCaseFunction = TRegExpr.InvertCaseFunction;
// ñòîéíîñò ïî ïîäðàçáèðàíå çà ñâîéñòâîòî InvertCase


Ïîëåçíè ãëîáàëíè ôóíêöèè

function ExecRegExpr (const ARegExpr, AInputStr : string) : boolean;
âðúùà èñòèíà àêî â ñòðèíãà AInputString ñå îòêðèå ñúâïàäåíèå íà èçðàçà ARegExpr
! àêî â AregExpr èìà ñèíòàêòè÷íè ãðåøêè, ãåíåðèðà èçêëþ÷åíèå

procedure SplitRegExpr (const ARegExpr, AInputStr : string; APieces : TStrings);
ðàçäåëÿ AInputStr íà ïàð÷åòà â APieces ñïîðåä ñðåùàíèÿòà íà ARegExpr

function ReplaceRegExpr (const ARegExpr, AInputStr, AReplaceStr : string) : string;
Âðúùà AinputStr, êàòî ñðåùàíèÿòà íà èçðàçà ARegExpr ñà çàìåíåíè ñ AReplaceStr

function QuoteRegExprMetaChars (const AStr : string) : string;
Çàìåíÿ âñè÷êè ìåòàñèìâîëè ñ òÿõíàòà áåçîïàñíà ôîðìà, íàïðèìåð 'abc$cd.(' ñå êîíâåðòèðà â 'abc\$cd\.\('
Òàçè ôóíêöèÿ å ïîëåçíà ïðè àâòîìàòè÷íî ãåíåðèðàíå íà èçðàçè îò ïîòðåáèòåëñêè âõîä

function RegExprSubExpressions (const ARegExpr : string;
ASubExprs : TStrings; AExtendedSyntax : boolean = False) : integer;
Ïðàâè ñïèñúê íà ïîäèçðàçèòå, íàìåðåíè â RE ARegExpr
 ASubExps âñÿêà ñòîéíîñò ïðåäñòàâëÿâà ïîäèçðàç, îò ïúðâèÿ äî ïîñëåäíèÿ, âúâ ôîðìàò:
String
òåêñò íà ïîäèçðàçà (áåç '()')
low word íà Object
ñòàðòîâà ïîçèöèÿ â ARegExpr, âêë. '(' àêî ñúùåñòâóâà! (ïúðâàòà ïîçèöèÿ å 1)
high word íà Object - äúëæèíàòà, âêë. '(' è ')' àêî ñúùåñòâóâàò!
AExtendedSyntax
òðÿáâà äà å True àêî ìîäèôèêàòîðúò /x å âêëþ÷åí ïðè èçïîëçâàíåòî íà RE.
Ïîëåçíà çà ðåäàêòîðè íà RE â GUI è ò.í. (Ïðèìåð çà èçïîëçâàíå èìà â ïðîåêòà
TestRExp.dpr)

Ðåçóëòàò      Çíà÷åíèå

0            Óñïåõ. Íÿìà íàìåðåíè íåáàëàíñèðàíè ñêîáè.
-1            íÿìà äîñòàòú÷íî çàòâàðÿùè ñêîáè ')'
-(n+1)            íà ïîçèöèÿ n å íàìåðåíà îòâàðÿùà '[' áåç ñúîòâåòñòâàùà é çàòâàðÿùà ']'
n            íà ïîçèöèÿ n å íàìåðåíà çàòâàðÿùà ')' áåç ñúîòâåòñòâàùà é îòâàðÿùà '('

àêî ðåçóëòàòúò å <> 0, òî ASubExpr ñúäúðæà ïðàçíè èëè íåêîðåêòíè ñòðèíãîâå.

Êëàñ 'èçêëþ÷åíèå'

Òîé îáðàáîòâà ãðåøêèòå íà TRegExpr:

ERegExpr = class (Exception)
public
ErrorCode : integer; // êîä çà ãðåøêà. Êîäîâåòå çà ãðåøêà ïðè êîìïèëèðàíå ñà < 1000.
CompilerErrorPos : integer; // Ïîçèöèÿ â èçðàçà, êúäåòî å âúçíèêíàëà ãðåøêàòà
end;

Êàê äà èçïîëçâàìå Unicode

TRegExpr ïîääúðæà UniCode, íî ðàáîòè ñ íåãî
ìíîãî áàâíî :(
Íÿêîé èñêà ëè äà ãî îïòèìèçèðà ? ;)
Èçïîëçâàéòå ãî ñàìî àêî íàèñòèíà âè òðÿáâà ïîääðúæêà íà Unicode !
Ïðåìàõíåòå '.' îò {.$DEFINE UniCode} â regexpr.pas. Ñëåä òîâà âñè÷êè ñòðèíãîâå ùå áúäàò òðåòèðàíè êàòî WideString.



© 2004 Andrey V. Sorokin, Saint Petersburg, Russia
anso@mail.ru
RegExpStudio.com

Help&Manual - the best help authoring tool!