Expresii regulate

Vor fi cazuri cand va fi greu sa aplicati functiile pentru managementul sirurilor de caractere pentru a obtine rezultatul dorit. Acest lucru se poate intampla cand stiti forma generala a continutului unui sir dar nu puteti sti cu exactitate continutul. De exemplu, daca vreti sa verificati un sir care contine 6 caractere daca este reprezentarea hexazecimala a unei culori, stiti ca valorile posibile sunt cifre de la 0 la 9 si litere de la A la F, dar va fi mai dificil de verificat fiecare caracter in parte daca contine una din aceste valori. In cazuri ca acestea se folosesc expresiile regulate. AutoIt pune la dispozitia programatorilor doua functii care permit lucrul cu expresiile regulate.

 

  1. StringRegExp

Aceasta functie verifica daca un sir de caractere se potriveste cu o expresie sablon. Functia are 4 parametri, primii 2 sunt sirul de caractere si expresia sablon, iar ultimii 2 parametri (optionali) sunt flag si offset (pozitia in sir de la care se va incepe verificarea). Functia va returna un rezultat in functie de valoarea parametrului flag. Parametrul flag poate avea una din valorile de mai jos.

0

Returneaza 1 daca s-a gasit in sir o expresie care potriveste sau 0 in caz contrar

1

Returneaza un vector cu toate potrivirile

2

Returneaza un vector cu toate potrivirile (stil Perl/PHP)

3

Returneaza un vector cu toate potrivirile globale

4

Returneaza un vector cu toate potrivirile globale (stil Perl/PHP)

Expresia sablon este o constructie speciala folosind expresii ca si cele de mai jos.

[ … ]

Potrivire orice caracter dintr-un set. Exemplu [aeiou] pentru vocale scrise cu caractere minuscule.

[^ … ]

Potrivire orice caracter care nu este dintr-un set.

[:class:]

Potrivire orice caracter dintr-o clasa.

[^:class:]

Potrivire orice caracter care nu este dintr-o clasa.

( … )

Potrivire un grup de caractere (care se pot repeta). Exemplu (ab)+ va gasi o potrivire pentru siruri de forma “ab” sau “ababab”

(?i)

Indicator pentru potriviri case insensitive

(?-i)

Indicator pentru potriviri case sensitive (default)

(?: … )

Grup care nu trebuie potrivit

(?i: … )

Grup care nu trebuie potrivit (case insensitive)

(?-i: … )

Grup care nu trebuie potrivit (case sensitive)

(?m)

^ si $ potrivesc linii noi

(?s)

. potriveste orice, incluzand liniile noi

(?x)

Ignora spatiile libere si comentariile

(?U)

Inversare cuantificatori

.

Potrivire orice caracter singur (exceptand liniile noi)

|

Ori logic (ca si expresie sau potrivire)

\

Introduce potriviri pentru caractere speciale (vezi urmatorii specificatori)

\\

Backslash

\a

Caracterul BEL (ASCII 7)

\A

Potrivire doar la inceput de sir

\b

Potrivire la marginile cuvantului

\B

Potrivire cand nu este la magine de cuvant

\c

Potrivire cu un caracter de control

\d

Potrivire orice digit

\D

Potrivire orice non-digit

\e

Caracterul Escape (ASCII 27)

\E

Modificare end case

\f

Caracterul Form Feed (ASCII 12)

\h

Potrivire orice spatiu liber orizontal

\H

Potrivire orice caracter care nu este spatiu liber orizontal

\n

Caracterul Line Feed (ASCII 10) (@LF)

\Q

Ghilimele

\r

Caracterul Carriage Return (ASCII 13) (@CR)

\s

Potrivire orice spatiu liber

\S

Potrivire orice caracter care nu este spatiu liber

\t

Caracterul TAB (ASCII 9)

\v

Potrivire orice spatiu liber vertical

\V

Potrivire orice caracter care nu este spatiu liber vertical

\w

Potrivire orice caracter “cuvant” (a-z, A-Z, 0-9 si _(underscore))

\W

Potrivire orice caracter “non-cuvant”

\###

Potrivire caracter ASCII (3 digiti in reprezentare octala)

\x##

Potrivire caracter ASCII (in reprezentare hexazecimala)

\z

Potrivire doar la final de sir

\Z

Potrivire doar la final de sir sau inainte de linie noua

 

{x}

Repeta caracterul, setul sau grupul precedent de exact x ori

{x,}

Repeta caracterul, setul sau grupul precedent de cel putin x ori

{0,x}

Repeta caracterul, setul sau grupul precedent de cel mult  x ori

{x, y}

Repeta caracterul, setul sau grupul precedent de un numar de ori curpins intre x si y, inclusiv

*

Repeta caracterul, setul sau grupul precedent de 0 sau mai multe ori, echivalent cu {0,}

+

Repeta caracterul, setul sau grupul precedent de 1 sau mai multe ori, echivalent cu {1,}

?

Caracterul, setul sau grupul precedent poate sau nu sa apara, echivalent cu {0,1}

? (dupa un caracter repetat)

Gaseste cea mai mica potrivire in locul celei mai mari.

 

Clase

Descriere

[:alnum:]

Litere si cifre

[:alpha:]

Litere

[:ascii:]

Caractere ASCII

[:blank:]

Spatii si TAB

[:cntrl:]

Caractere de control

[:digit:]

Cifre zecimale (identic cu \d)

[:graph:]

Caractere printabile, exculzand SPACE

[:lower:]

Caractere minuscule

[:print:]

Caractere printabile, inculzand SPACE

[:punct:]

Caractere printabile, excluzand literele si cifrele

[:space:]

Spatii libere

[:upper:]

Caractere majuscule

[:word:]

Caractere “cuvant”

[:xdigit:]

Cifre hexazecimale

 

Un exemplu folosind expresiile regulate:

In acest exemplu se verifica daca un sir contine exact un grup de 6 caractere care pot avea valori intre 0-9 si A-F (atat minuscule cat si majuscule). Caracterul $ impune ca rezultatul potrivirilor cu modelul dat sa se aplice doar la terminarea sirului.

 

  1. StringRegExpReplace

Este o functie similara cu StringRegExp,  cu particularitatea ca efectueaza substitutii daca se gasesc sub-siruri care sa corespunda sablonului dat. Functia are 4 parametri, primii 3 sunt: sirul in care se efectueaza cautarea dupa sub-siruri, sablonul si sub-sirul cu care se inlocuiesc potrivirile pe baza sablonului. Ultimul parametru este optional si se refera la numarul de substitutii pe care sa le faca (default = 0, substitutii globale pentru toate sub-sirurile aflate).

 

Un exemplu de substitutie folosind aceasta functie:

In acest exemplu, caracterele neprintabile vor fi inlocuite cu caracterul Space.

Nota: functia Chr returneaza un caracter corespunzator unui cod ASCII.

 

Pentru mai multe referinte despre folosire expresiilor regulate, puteti vizita site-ul RegEx.


* Pentru orice intrebari sau nelamuriri legate de curs sau limbajul AutoIt accesati sectiunea AutoIt a forumului SkullBox sau platforma de suport tehnic NetHelp.