Expresii regulate  


Cãutare


Siteuri recomandate

  • ABC Domenii Pachete de gazduire pentru siteuri personale si bloguri.
  • AutoIt Script Curs AutoIt in limba romana.
  • CHML Web Services Servere dedicate si servere virtuale private.
  • Hostvision Gazduire siteuri web si inregistrare domenii
  • IPFind.eu IPFind.eu – Free IP address finder and DNS troubleshooter
  • LAMP Platforma open source de gazduire a site-urilor web.
  • NetHelp Intrebari tehnice si raspunsuri de calitate pentru intrebari tehnice.
  • SkullBox Comunitate online pentru pasionatii de IT.
  • WordPress Admin Tutoriale de utilizare si administrare a blogurilor WordPress.

Introducere in PCRE

PCRE (Perl Compatible Regular Expressions) este o librărie de expresii regulate scrisă în limbajul C şi inspirată din interfaţa externă Perl. Librăria PCRE este scrisă de Philip Hazel. Sintaxa PCRE este mult mai puternică şi mai flexibilă decât cea POSIX şi alte librării de expresii regulate.Librăria PCRE este deja încorporată în proiecte open-source mari precum limbajul de scripting PHP sau serverul Apache HTTP. Librăria poate să fie folosită în medii precum Windows sau Unix, Unix-like. PCRE conţine foarte multe opţiuni unice. Iniţial s-a dorit să se asemene cu librăria de expresii regulate de la Perl însă pe parcurs treaba a început să capete contur şi să se schimbe. PCRE nu vine cu librăria Unicode compilată precum motoarele RegEx de la alte limbaje ca Java, XML, .NET. În cazul în care dorim s-o folosim trebuie să compilăm librăria Unicode cu PCRE. Începân cu Perl 5.10.0, Perl suportă câteva extensii PCRE dar şi Python pentru sintaxa RegEx. Deşi programtorii de Perl sunt încurajaţi să foloseasca sintaxa Perl sunt prezente şi se pot folosi şi sintaxe de la PCRE.

PCRE are propiul sau API. Distribuţia conţine deasemenea şi un set e funcţii C++ de înveliş care sunt scrise chiar de Google Inc. Deasemenea există un set de funcţii C, de înveliş, care sunt bazate pe sintaxa POSIX. Acestea se găsesc în librăria libpcreposix. Aceste funcţii oferă doar nişte cereri în modul POSIX la interfaţa PCRE. Expresiile regulate tot au sintaxa Perl şi semantica. API-ul de la POSIX este restricţionat şi nu oferă acces total la toate facilităţile PCRE.

La instalarea librăriei PCRE, pe un sistem normal Unix-like, o să găseşti nişte pagini man al căror nume începe cu “pcre”. Cea care se numeşte doar pcre listează pe toate celelalte. În plus de această documentaţie bazată pe pagini man, provenite direct din packet, pcre mai are fişiere text de documentaţie şi anume doc/pcre.txt şi doc/pcregrep.txt sau doc/pcretest.txt. Acestea sunt în distribuţia sursă. Deasemenea avem şi o documentaţie HTML care se găseşte în doc/html şi este instalată în /share/doc/pcr/html. Se pot deasemenea găsi contribuţii de la user pe siteul ftp://ftp.csx.cam.ac.uk. În fişierul README se găsesc mici descrieri care spun ce sunt aceste distribuţii. Unele descrieri sunt complet scrise acolo altele referă către un link care duce la descrierea iniţială. UTF-8 permite PCRE să proceseze caractere care au valori mai mari decât 255 în şirul de caractere. De unul singur, PCRE nu are facilitări de accesare a propietăţilor caracterelor mai mari decât 255. Documentaţia din fişierele man este suficientă pentru a descoperi cu ce se mănâncă librăria şi cum se pot face adăugiri şi alte chestii interesante. Pentru a instala PCRE pe sistemele care nu sunt UNIX trebuie să citim documentaţia din fişierul NON-UNIX-USE. Dacă sistemul suportă folosirea utilitarelor configure şi make atunci se poate construi exact ca în sistemele Unix-like. Să presupunem că deja am instalt librăria PCRE pe un sistem Unix-like, acum am ajuns la partea interesantă şi anume testarea: numai aşa putem să vedem dacă librăria abia instalată este funcţională sau nu. Pentru a testa librăria PCRE pornim RunTest (care este un script, care este creat the procesul de configurare).

Pentru viteză PCRE foloseşte patru tabele pentru a manipula şi a identifica acele caractere al căror code point este mai mic decât 256. Librăria PCRE suportă doar verificare RegEx, o chestie pe care o face foarte bine. Însă nu oferă suport pentru căutare şi înlocuire, împărţirea şirurilor de caractere sau alte opţiuni drăguţe de genul. Nu poate să fie vorba de o problemă căci odată înţelese expresiile regulate oricine îşi poate scrie singur codul pentru aplicaţiile menţionate mai sus. Dacă avem imaginaţie şi curiozitate putem să scriem o mulţime de expresii regulate care să ofere cele mai diverse interpretări şirurilor de caractere. Cum spuneam şi mai devreme PCRE-ul iniţial nu are suport Unicode. Dacă încercăm să folosim \p, \P sau \X (care verifică orice caracter Unicode spre deosebire de punct care se încurcă la caracterele Unicode care pot fi create din mai multe code pointuri) librăria va da un mesaj de eroare precum că Unicode-ul nu este compilat, asta dacă nu am compilat deja Unicode-ul în PCRE. Problema nu este aşa de mare pe cât pare. Trebuie doar să fim atenţi în cazul în care ne legăm de Unicode să compilăm librăria. Pentru a include şi caracterele Unicode trebuie să aăugăm următoarea comandâ: –enable-unicode-properties. Aceasta implică şi suport UTF-8 chiar dacă explicit tu ai cerut numai Unicode. Totuşi ţi-l oferă. Includerea propietăţilor Unicode îţi oferă posibilitatea de a adăuga circa 30k de tabele în librăria PCRE. Implicit PCRE interpretează caracterul 10 ca indicator pentru sfârşit de linie. Pentru a folosi newline-ul normal care apare în sistemele Unix-line putem să compilăm librăria PCRE cu caracterul 13 (carriage return, CR) adăugând: –enable-newline-is-cr. Putem totuşi să-l facem să recunoască orice newline cu următoarea comandă: –enable-newline-is-any. Prin intermediul acestei comenzi PCRE-ul va recunoaşte orice secvenţă newline din Unicode. Spre exemplu în sintaxa PCRE putem lăsa şi comentarii în expresiile regulate. Comentariile de genul (?#comentariu) sunt ignorate de motorul RegEx şi şablonul este doar vizualizat pentru detalii despre expresia regulată. Pe lângă PCRE şi .NET, Perl, Python sau Ruby folosesc acest tip de comentarii. Ca să facem cest tip de comentarii mai vizibile putem să adăugăm şi modificatorul free-spacing. O altă chestie interesantă despre PCRE este că el suportă grupurile atomice alături şi de alte limbaje precum Java, .NET, Perl sau Ruby. Majoritatea limbajelor folosesc cuantificatorii posesivi în motorul RegEx. În PCRE modul implicit este multi-line mode adică modul pe mai multe linii.

În cazul în care dorim să downloadăm librăria PCRE versiunea 7.8 avem o putem face de pe siteul ftp://ftp.csx.cam.ac.uk folosind FTP anonim. De asemenea putem să dowloadăm librăria şi folosind HTTP de pe
SourceForge.net. O versiune precompilată pentru Windows a PCRE putem găsi la adresa gnuwin32.sourceforge.net
În concluzie librăria PCRE este uşor de folosit şi robustă şi ne poate oferi un mod real de a ne rezolva problemele şi a căuta şiruri de caractere. Deşi poate că lipsesc anumite facilităţi minore, un programator care ştie cât de cât sintaxa îşi poate scrie propiul şablon.