Expresie uzuala

O expresie regulată ( engleză expresie regulată , abrevierea regexp sau Regex ) este un șir de caractere în informatică teoretică , care este folosit pentru a descrie seturi de șiruri de caractere , cu ajutorul unor sintactice reguli. Expresiile regulate sunt utilizate în principal în dezvoltarea de software . Pe lângă implementări în multe limbaje de programare , mulți editori de text procesează și expresii regulate în funcția „ Găsiți și înlocuiți ”. Un caz de utilizare simplu al expresiilor regulate sunt comodinele .

Expresiile regulate pot fi utilizate ca criterii de filtrare în căutarea textului prin potrivirea textului cu modelul de expresie regulată. Acest proces este, de asemenea, numit potrivire de tipare . De exemplu, este posibil să căutați toate cuvintele dintr-o listă de cuvinte care încep cu S și se termină cu D fără a fi nevoie să specificați în mod explicit literele dintre sau numărul lor.

Conceptul expresiei regulate se întoarce în esență la matematicianul Stephen Kleene , care a folosit termenul similar set regulat .

Expresii regulate în informatică teoretică

Fundamente teoretice

Expresiile regulate descriu o familie de limbaje formale și aparțin astfel informaticii teoretice . Aceste limbi, limbile obișnuite , se află la nivelul de expresie cel mai scăzut și, prin urmare, cel mai slab din ierarhia Chomsky (tip 3). Acestea sunt generate de gramaticile obișnuite .

Pentru fiecare expresie regulată există un automat finit care acceptă limbajul specificat de expresie. Un automat finit corespunzător (nedeterminist) poate fi construit dintr-o expresie regulată cu construcția Thompson . Acest lucru face ca expresiile regulate să fie relativ ușor de implementat. În schimb, pentru fiecare automat finit există o expresie regulată care descrie limbajul acceptat de automat. O expresie regulată corespunzătoare poate fi construită dintr-un automat finit nedeterminist folosind algoritmul lui Kleene . Algoritmul lui Kleene produce de obicei expresii regulate foarte lungi. Eliminarea de stat (germană de fapt: „eliminare de stat“) prevede , de obicei , expresii regulate mai scurte , în practică. În cel mai înalt caz („cel mai rău caz” în engleză), totuși, ambii algoritmi returnează expresii regulate ale lungimii , cu numărul de caractere din alfabetul de bază și numărul de stări din mașină.

sintaxă

Sintaxa definește cu exactitate cum arată expresiile regulate.

Expresiile regulate sunt întotdeauna definite folosind un set dat de caractere , așa-numitul alfabet . Expresiile regulate se bazează pe exact trei operații: alternativă, concatenare și repetare. Definiția formală arată astfel:

  1. (simbolul special pentru setul gol ) este o expresie regulată.
  2. pentru toate este (un caracter din reprezentarea alfabetului subiacent) o expresie regulată.
  3. Dacă și sunt expresii regulate, atunci (alternativă), ( concatenare ) și ( Kleene shell , stea Kleene) sunt, de asemenea, expresii regulate.

Simbolul este folosit în locul alternativei . Apoi scrii . Alternativ, există și un simbol operator pentru concatenare; se scrie apoi unul .

De asemenea, puteți permite constante și operații suplimentare, cu condiția ca efectul lor să poată fi descris și folosind regulile de bază menționate mai sus. În literatura de specialitate se poate găsi, printre altele, expresia regulată sau plicul pozitiv Kleenesche , care poate fi privit ca o abreviere a .

Dacă specificați o prioritate a operatorilor , puteți face fără unele paranteze. Ordinea precedenței este de obicei steaua Kleene față de concatenare față de alternativă . În schimb , ortografia este suficientă .

Numărul de operatori cuibăriți * se numește înălțimea stelei .

semantică

Semantica expresiilor regulate definește cu precizie semnificația formală a sintaxei expresiilor regulate.

O expresie regulată descrie un limbaj formal, adică un set de cuvinte (șiruri). Definiția semanticii poate fi descrisă în același mod ca și definiția sintaxei. Denotă limbajul formal care este specificat de expresia regulată .

  1. Simbolul special pentru setul gol specifică limba goală.
  2. pentru toate adevărate
    Fiecare reprezentant al unui caracter din alfabet specifică limba care conține doar acel caracter.
  3. sunt și expresii regulate, se aplică următoarele:
    Alternativa dintre două expresii descrie limbajul care rezultă din unirea celor două limbi descrise de cele două expresii.
    Concatenarea a două expresii descrie limbajul care conține doar cuvintele care au un cuvânt din limba descrisă de prima expresie ca prefix și al cărei sufix restant imediat următor este un cuvânt din limba descrisă de a doua expresie.
    Coaja Kleene a expresiilor regulate descrie coaja Kleene a limbajului descris de .

Dacă definiția sintaxei expresiilor regulate conține și constantă , atunci sensul acesteia este definit ca , adică limba care conține doar cuvântul gol .

Cuvântul gol este un cuvânt într-un limbaj formal ( ) și, prin urmare, nu este o expresie regulată. Limbajul conține doar cuvântul gol, dar poate fi , de asemenea , fără a constantei de o expresie regulată pentru a descrie, de exemplu: . Cu toate acestea, o distincție vizuală nu se face întotdeauna între o expresie regulată și limba asociate, astfel încât în loc să fie folosit ca o expresie regulată pentru limba , distincția între și și între și pot fi omise.

Exemple

În cazul în care alfabetul de la litera , și este, prin urmare , atunci poate fi descrisă în următoarele limbi cu expresiile regulate corespunzătoare:

  • Limba tuturor cuvintelor care constau din orice număr sau orice număr :
    Sintaxa: . Semantică:
  • Limba tuturor cuvintelor care încep cu și se termină cu orice număr sau orice număr sau orice număr :
    Sintaxa: . Semantică:
  • Limba tuturor cuvintelor care încep și se termină cu și constă doar din orice număr între :
    Sintaxa: . Semantică:
  • Limba tuturor cuvintelor care constau din cele două caractere și :
    Sintaxa: . Semantică:

Utilizarea expresiilor regulate

Ken Thompson a folosit această notație în anii 1960 pentru a construi qed (o versiune anterioară a editorului Unix ed ) și mai târziu pentru a scrie instrumentul grep . De atunci, multe programe și biblioteci de limbaje de programare au implementat funcții pentru a utiliza expresii regulate pentru a căuta și înlocui șiruri. Exemple sunt programele sed , grep, emacs , limbajele de programare Perl și Tcl și bibliotecile standard pentru limbajele de programare C , C ++ , Java , JavaScript , Python , PHP , Ruby și cadrul .Net . Procesor de text și foaia de calcul al pachetului de birou OpenOffice.org oferă posibilitatea de a căuta folosind expresii regulate în text.

Există diferențe în funcționalitate și sintaxă între diferite implementări Regexp. În limbajele de programare, au predominat expresiile regulate compatibile Perl (PCRE), care se bazează pe implementarea în Perl 5.0. În plus, în POSIX.2 se disting distincția dintre expresiile regulate „de bază” ( expresii regulate de bază) și expresiile regulate „extinse” (expresii regulate extinse) .

Unele programe, de exemplu editorul de text Vim , oferă posibilitatea de a comuta între diferite sintaxe regexp.

Expresiile regulate joacă un rol important în analiza lexicală a textelor sursă , de exemplu în compilatoare sau pentru evidențierea sintaxei în editori. Un scaner lexical descompune textul sursă în așa-numitele jetoane (cuvinte cheie, operatori, ...) folosind expresii regulate . Deoarece majoritatea limbajelor de programare sunt limbaje fără context , expresiile regulate nu sunt suficient de puternice pentru a-și descrie sintaxa. Din acest motiv, analiza sintactică care urmează cu compilatoarele este de obicei efectuată de un program separat, parserul .

Expresiile regulate joacă, de asemenea, un rol în bioinformatică . Acestea sunt utilizate în bazele de date cu proteine ​​pentru a descrie motivele proteice. Expresia regulată

W-x{9,11}-[VFY]-[FYW]-x{6,7}-[GSTNE]-[GSTQCR]-[FYW]-R-S-A-P

descrie, de exemplu, un domeniu proteic în PROSITE . Expresia regulată de mai sus spune următoarele: La început alegeți aminoacidul triptofan (o literă cod W), apoi alegeți între 9 și 11 aminoacizi în mod liber, apoi alegeți fie V, F sau Y, apoi alegeți fie F, Y sau W, apoi din nou 6 până la 7 aminoacizi liberi, apoi fie G, S, T, N sau E, apoi fie G, S, T, Q, C sau R, apoi F, Y sau W, apoi R apoi S apoi A apoi P .

Expresii regulate în practică

Majoritatea implementărilor de astăzi acceptă extensii, cum ar fi referințele din spate. Acestea nu mai sunt expresii regulate în sensul informaticii teoretice, deoarece expresiile extinse în acest mod nu mai descriu neapărat limbaje de tip 3 ale ierarhiei Chomsky .

Următoarele descrieri de sintaxă se referă la sintaxa implementărilor comune cu extensii, deci corespund doar parțial definiției de mai sus din informatică teoretică.

O utilizare obișnuită a expresiilor regulate este de a găsi șiruri speciale într-un set de șiruri. Descrierea dată mai jos este o convenție (adesea utilizată) pentru a implementa în mod specific concepte precum clasa de caractere , cuantificare , legare și rezumare . Aici, o expresie regulată este formată din caracterele alfabetului subiacent în combinație cu metacaractere [ ] ( ) { } | ? + - * ^ $ \ . (uneori dependente de context) și, de asemenea, în unele implementări : ! < =. Proprietatea meta a unui personaj poate fi anulată printr-o bară inversă precedentă . Toate celelalte caractere din alfabet stau singure.

Litere de caracter

Acele personaje care trebuie să se potrivească direct (literal, literal) sunt, de asemenea, notate direct. În funcție de sistem, există și opțiuni pentru specificarea caracterului folosind codul octal sau hexazecimal ( sau ) sau poziția hexazecimală Unicode ( ). \ooo\xhh\uhhhh

Un personaj dintr-o selecție

Cu paranteze pătrate permite o selecție a caracterelor să definească ( [și ]). Expresia dintre paranteze pătrate reprezintă apoi exact un caracter din această selecție. În cadrul acestor definiții ale claselor de caractere, unele simboluri au semnificații diferite decât în ​​contextul lor normal. Semnificația unui simbol depinde în parte de contextul în care apare între paranteze.

De exemplu, un circumflex ^ la începutul unei definiții a clasei de caractere înseamnă că clasa de caractere este negată sau inversată (în sensul de a forma un complement ). Cu toate acestea, dacă un circumflex se găsește oriunde altundeva în definiție, acesta trebuie înțeles literal. Semnificația cratimei ( -) este, de asemenea, dependentă de context . În plus, motoarele regex (de exemplu POSIX și PCRE) diferă unele de altele în anumite puncte. Dacă există o cratimă -între două caractere în definiția clasei, de exemplu [a-g], atunci aceasta trebuie înțeleasă ca o bis-liniuță, adică ca o descriere a unui interval de caractere sau a unui interval de caractere în raport cu tabelul ASCII . Exemplul dat ar fi echivalent cu [abcdefg]. Cratimele de la începutul sau sfârșitul unei clase de caractere sunt interpretate ca personajul în sine.

Exemple de selecție a personajelor
[egh] unul dintre personaje e, gsauh
[0-6] o cifră de la 0la 6(cratimele indică un interval)
[A-Za-z0-9] orice literă sau număr latin
[^a] orice caracter cu excepția a( ^negează același lucru la începutul unei clase de caractere)
[-A-Z], [A-Z-](sau [A-Z\-a-z], totuși, nu conform POSIX) Selecția conține, de asemenea, cratima -dacă este primul sau ultimul caracter din enumerarea unei clase de caractere sau, în cazul PCRE, dacă metafuncția sa într-o selecție este anulată de o bară inversă precedentă

Clase de caractere predefinite

Există clase de caractere predefinite care nu sunt acceptate în același mod de toate implementările, deoarece sunt doar forme scurte și pot fi descrise și printr-o selecție de caractere . Clasele importante de personaje sunt:

\d d igit o cifră, adică [0-9](și, eventual, și alte numere în Unicode , de exemplu, cifre bengaleze )
\D nu d igit un personaj care nu este o cifră, deci [^\d]
\w w caracter ord o literă, un număr sau sublinierea, adică [a-zA-Z_0-9](și, eventual, și litere non-latine, de exemplu, umlauturi)
\W nu w caracter ord un caracter care nu este nici o literă, nici un număr, nici un subliniat, deci [^\w]
\s alb s ritm de obicei , cel puțin caracterul spațiu și clasa de caractere de control \f , \n, \r, \tși\v
\S nici alb s ritm un personaj care nu este spațiu alb, deci [^\s]

O perioadă ( .) înseamnă că (aproape) orice personaj poate fi în locul său. Majoritatea implementărilor RegExp nu văd în mod implicit întreruperile de linie ca orice caracter, dar acest lucru poate fi realizat în unele programe folosind așa-numitul modificator cu o singură linies (de exemplu în /foo.bar/s).

În multe implementări mai noi, clasele pot fi, de asemenea, specificate în paranteze după POSIX , care la rândul lor conțin paranteze pătrate. De exemplu, acestea sunt:

Exemple de clase de caractere, sortate ierarhic
  • [:cntrl:]- controlează personajele. În ASCII acestea sunt caracterele 00către 1Fși 7F(DEL).
  • [:print:]- caracterele imprimabile: [:alnum:], [:punct:]și spații
Observații:
ZK1Caracterul cu numărul Unicode 160 (hex: A0) (corespunde entității HTML & nbsp;), cunoscut și sub numele de „ spațiu protejat ”, nu poate fi găsit de clasa [: spațiu:] și trebuie identificat separat folosind punct de codare .
ZK2Ce litere sunt depinde de localizarea în sistemele de operare comune, adică depinde de regiune și de limbă setată.

Cuantificatoare

Cuantificatorii ( cuantificatori englezi , de asemenea cuantificatori sau factori de repetare ) permit expresia anterioară să fie permisă în diverși multipli din șirul de caractere.

? Expresia precedentă este opțională, poate apărea o dată, dar nu are nevoie de ea, adică expresia are loc zero sau o dată. (Aceasta corespunde {0,1})
+ Expresia precedentă trebuie să apară cel puțin o dată, dar poate apărea și de mai multe ori. (Aceasta corespunde {1,})
* Expresia precedentă poate apărea ori de câte ori doriți (nici măcar o dată). (Aceasta corespunde {0,})
{n} Expresia precedentă trebuie să apară exact de n ori. (Aceasta corespunde ) {n,n}
{min,} Expresia de mai sus trebuie să aibă loc cel puțin min .
{min,max} Expresia precedentă trebuie să apară cel puțin de minimum și maxim de maximum de ori.
{0,max} Expresia precedentă poate apărea de maximum ori.

Cuantificatorii se referă la expresia regulată precedentă, dar nu neapărat la potrivirea pe care a găsit-o. De exemplu, a+se utilizează un „a” sau „aaaa”, dar [0-9]+nu corespunde doar cifrelor identice repetate , ci și secvențelor de cifre mixte, de exemplu „072345”.

Alte exemple sunt:

  • [ab]+ corespunde „a”, „b”, „aa”, „bbaab” etc.
  • [0-9]{2,5}corespunde la două, trei, patru sau cinci cifre la rând, de ex. B. „42” sau „54072”, dar nu șirurile de caractere „0”, „1.1” sau „a1a1”.

Dacă un șir de caractere ar trebui să fie format doar din șablonul căutat (și nu doar să îl conțină), în majoritatea implementărilor trebuie definit în mod explicit că șablonul trebuie să se extindă de la începutul ( \Asau ^) QF1 până la sfârșitul șirului de caractere ( \Z, \zsau $) QF1 . În caz contrar, de exemplu, recunoaște [0-9]{2,5}și șirul „12345” pentru șirul de caractere „1234507”. Din același motiv, de exemplu a*, ar exista întotdeauna o lovitură, deoarece fiecare șir de caractere, în special cuvântul gol, conține cel puțin 0 ori caracterul „a”.

Cuantificatoarele sunt (implicit "lacom" englezesc lacom implementat). Adică, o expresie regulată este rezolvată la cea mai apropiată potrivire posibilă. Cu toate acestea, din moment ce acest comportament nu este întotdeauna dorit, cuantificatorii pot fi declarați ca „frugali” sau „precauți” (englezi non-lacomi , reticenți ) în multe implementări mai noi . De exemplu, un semn de întrebare este plasat ?după cuantificator în Perl sau tcl . Implementarea cuantificatoarelor frugale este comparativ complexă și lentă în timpul procesului de căutare (necesită urmărire înapoi ). B. sed.

Exemplu (sintaxa Perl)
Presupunând că expresia regulată este A.*Baplicată șirului „ABCDEB”, ar fi găsită ca „ABCDEB”. Cu ajutorul cuantificatorului „frugal” *?, expresia acum modificată - adică A.*?B - doar șirul de caractere „AB”, întrerupe astfel căutarea primului „B” găsit. O expresie regulată echivalentă pentru interpreții care nu acceptă acest cuantificator ar fi A[^B]*B.
QF1Caracterele ^și $potrivirea în modul multiliniu , adică dacă modificatorul m este setat, începutul și sfârșitul liniilor.

Comportament posesiv

O variantă a comportamentului lacom descris mai sus este potrivirea posesivă . Cu toate acestea, întrucât aici este împiedicată urmărirea înapoi, personajele care se potrivesc nu sunt eliberate din nou. Acesta este motivul pentru care termenii sinonimi de grupare atomică , subexpresie independentă sau sub-model non-backtracking pot fi găsiți și în literatură . Sintaxa pentru aceste construcții variază în funcție de diferitele limbaje de programare. Inițial, astfel de expresii parțiale (engleză „subpattern”) au fost formulate în Perl . În plus, din moment ce Perl 5,10, există echivalentul, deja disponibil în cuantificatorii posesivi Java , , și . (?>Ausdruck)++*+?+{min,max}+

exemplu
Presupunând că expresia regulată este A.*+Baplicată șirului „ABCDEB” , nu ar găsi o potrivire. Când se procesează expresia regulată, partea se va .*+potrivi până la sfârșitul șirului de caractere. Cu toate acestea, pentru a găsi întreaga expresie, un personaj - în acest caz „B” - ar trebui să fie eliberat din nou. Cuantificatorul posesiv interzice acest lucru datorită retrogradării suprimate, motiv pentru care nu se poate găsi nicio potrivire reușită.

Grupări și referințe înapoi

Expresiile pot fi rezumate cu paranteze rotunde (și : De exemplu, un "abc" sau un "abcabc" etc. ) (abc)+

Unele implementări salvează potrivirile găsite de grupări și permit reutilizarea acestora în expresii regulate sau înlocuirea textului. Acestea sunt backreferences ( în engleză referințele spate numit). Notația sau este adesea utilizată, unde n corespunde grupării a n-a . O poziție specială este n = 0, care reprezintă de obicei potrivirea întregii expresii regulate. \n$n

exemplu
O căutare și înlocuire cu AA(.*?)BBca expresie de căutare obișnuită și \1ca înlocuitor înlocuiește toate șirurile de caractere cuprinse de AA și BB cu textul cuprins între AA și BB . Asta înseamnă că AA și BB și textul dintre acestea sunt înlocuite cu textul care a fost inițial între AA și BB , astfel încât AA și BB lipsesc în rezultat.

Interpretorii de expresie regulată care permit referințe înapoi nu mai sunt conforme cu tipul 3 al ierarhiei Chomsky . Lema de pompare poate fi folosit pentru a arăta că o expresie regulată care determină dacă un șir de caractere are 1același număr de înainte și după aceasta 0nu este o limbă obișnuită .

În plus, există și grupări care nu generează o referință înapoi (engleză non-capturing ). Sintaxa pentru acest lucru în cele mai multe implementari este (?:...) . Documentația Regexp indică faptul că ar trebui întotdeauna evitată crearea de referințe înapoi dacă acestea nu sunt accesate ulterior. Deoarece generarea referințelor costă timpul de execuție și ocupă spațiu pentru stocarea potrivirii găsite. În plus, implementările permit doar un număr limitat de referințe înapoi (adesea doar maximum 9).

exemplu

Expresia regulată \d+(?:-\d+)*poate fi utilizată pentru a găsi secvențe de secvențe numerice separate prin cratime fără a primi ultima secvență numerică separată printr-o cratimă ca referință înapoi.

exemplu

O dată în format MM/DD/YYYYar trebui convertită în format YYYY-MM-DD.

  1. Cu ajutorul expresiei ([0-1]?[0-9])\/([0-3]?[0-9])\/([0-9]{4}), se extrag cele trei grupe de numere.
  2. Cu expresia de înlocuire \3-\1-\2, grupurile individuale sunt convertite în formatul corect.

Alternative

Puteți |permite expresii alternative cu simbolul.

exemplu
ABC|abcînseamnă „ABC” sau „abc”, dar z. B. nu „Abc”.

Mai multe personaje

Pentru a sprijini aplicațiile de pe computer care se referă adesea la șiruri de caractere, următoarele caractere sunt definite de obicei pe lângă cele menționate deja:

^ reprezintă începutul liniei (nu trebuie confundat cu ^selectarea caracterelor folosind [și ]).
$ poate reprezenta sfârșitul unei linii sau a unui șir de caractere, în funcție de context, deși în unele implementări poate urma un „\ n”. Meciurile finale finale \z.
\ dacă este necesar, anulează meta-semnificația următorului caracter (vezi caracterele de mascare ). De exemplu, expresia (A\*)+permite șirurile „A *”, „A * A *” și așa mai departe. În acest fel, o perioadă „.” Poate fi căutată și \.în timp ce căutați \cu \\.
\b șir gol la începutul sau la sfârșitul unui cuvânt
\B șir gol care nu formează începutul sau sfârșitul unui cuvânt
\< șir gol la începutul cuvântului
\> șir gol la sfârșitul cuvântului
\n o întrerupere de linie în format Unix
\r o întrerupere de linie în format (vechi, adică înainte de 1999) Mac
\r\n o întrerupere de linie în format DOS și Windows
\t un caracter tab orizontal
exemplu
[^ ]$ înseamnă: Șirul de caractere trebuie să fie format din cel puțin un caracter, iar ultimul caracter nu poate fi un spațiu.

Afirmații privitoare la jur

Perl versiunea 5 a introdus , de asemenea , uita-înainte și uite-spatele afirmații , în plus față de expresiile regulate obișnuite (cum ar fi „de perspectivă“ și „retroactiv“ ipoteze sau afirmații), care sunt rezumate sub termenul look- în jurul valorii de afirmații . Aceste constructe extind expresiile regulate prin posibilitatea de a formula condiții dependente de context fără a găsi contextul în sine potrivit. Adică, doriți să găsiți toate șirurile „Sport”, unde urmează șirul „simplist”, dar fără șirul găsit „simplist” conține șirul în sine, aceasta ar fi o afirmație posibilă Sport(?=verein). În propoziția de exemplu „Un sportiv participă la sport într-un club sportiv”, expresia obișnuită s-ar potrivi cu ultima apariție a „Sportului”, deoarece doar acesta este urmat de șirul „club”; totuși, nu s-ar potrivi cu „șirul sportiv” al șirului.

Datorită proprietății că este specificat contextul specificat (în exemplul „club”), dar nu este o parte explicită a șirului de caractere corespunzător (aici „sport”), atributul de lățime zero este de obicei menționat și în legătură cu afirmații . Denumirile complete sunt astfel - în funcție de necesitatea unui anumit context (pozitiv) sau interzis (negativ) - afirmații pozitive / negative cu lățime zero / în spate. Numele direcțiilor provin din faptul că analizatorii Regexp procesează întotdeauna un șir de caractere de la stânga la dreapta.

definiție Descriere Explicaţie Notaţie
(?=Ausdruck) afirmație pozitivă privind anticiparea Expresia trebuie săurmeze expresia de mai sus Ausdruck(?=Ausdruck)
(?!Ausdruck) afirmație privitoare la perspectivă Expresia nu trebuie săurmeze expresia menționată anterior Ausdruck(?!Ausdruck)
(?<=Ausdruck) afirmație pozitivă Expresia trebuie săpreceadăurmătoarea expresie (?<=Ausdruck)Ausdruck
(?<!Ausdruck) afirmație negativă Expresia nutrebuiesă preceadăurmătoarea expresie (?<!Ausdruck)Ausdruck

Look-around-urile nu sunt acceptate doar de Perl și PCRE , ci și de Java , .NET și Python , printre altele . De la versiunea 1.5, JavaScript interpretează aspecte pozitive și negative.

exemplu
\s(?=EUR)reprezintă un caracter „spațiu alb” (adică spațiu sau filă) urmat de șir EUR. Spre deosebire de \sEUR, aici EURnu aparține unui șir de caractere potrivite (în engleză: „șir de caractere potrivite”).

Expresii condiționate

Expresiile condiționale sunt relativ neobișnuite. Acestea pot fi utilizate în Perl, PCRE și în cadrul .Net, printre altele. Python oferă doar o funcționalitate limitată pentru astfel de expresii în legătură cu afirmațiile privind privirea .

(?(Bedingung)wahr-Ausdruck|falsch-Ausdruck) Dacă se găsește expresia dată „condiție”, se folosește „expresia adevărată”. Dacă termenul de căutare nu poate fi găsit, se folosește „termenul greșit”.

exemplu

Exprimarea (\()?\d+(?(1)\))siruri de caractere sunt ca 1, (2), 34sau (567), dar nu a 3)găsit.

literatură

Expresii obisnuite

Expresii regulate și limbaje naturale

  • Kenneth R. Beesley, Lauri Karttunen: Morfologia statului finit. Distribuit pentru Centrul pentru Studiul Limbii și Informației. 2003. Seria 2003: (CSLI-SCL) Studii în lingvistică computațională.

Expresii regulate și teoria automatelor

  • Jan Lunze: Sisteme discrete de evenimente. Oldenbourg, 2006, ISBN 3-486-58071-X , pp. 160-192.

Literatura de cercetare

  • Stephen C. Kleene: Reprezentarea evenimentelor în rețelele nervoase și automatele finite. În: Claude E. Shannon, John McCarthy (Eds.): Automata Studies. Princeton University Press, 1956, pp. 3-42.

Link-uri web

software

Dovezi individuale

  1. a b Stephen C. Kleene : Reprezentarea evenimentelor în plasele nervoase și automatele finite . În: Claude E. Shannon , John McCarthy (Eds.): Automata Studies . Princeton University Press, 1956, pp. 3-42 .
  2. ^ Alfred V. Aho , Ravi Sethi, Jeffrey Ullman : Compilatoare: Principii, tehnici și instrumente. Addison-Wesley, 1986
  3. ^ A b c John E. Hopcroft , Jeffry D. Ullman : Introducere în teoria automatelor, limbaje formale și teoria complexității . Addison-Wesley, Bonn 1994, ISBN 3-89319-744-3 .
  4. Jacques Sakarovitch: Limbajul, expresia și automatul (mic) . În: LNCS . 3845, 2006, pp. 15-30. doi : 10.1007 / 11605157_2 .
  5. Specificații POSIX
  6. RE Bracket Expression , IEEE Std 1003.1, The Open Group Base Specifications, 2004
  7. Afirmații Lookahead și Lookbehind Zero-Width . Regular-Expressions.info
  8. ^ Rețeaua dezvoltatorilor Mozilla: Referință JavaScript
  9. Condiționalele If-Then-Else în expresii regulate . Regular-Expressions.info