Fromris
 
 
 
 
 
 
VII
 
Buhalterinė apskaita verslui. Dirbame Vilniuje.  Tel. +370 672 49472
 

Teksto šablonai (RegEx)

 

Reguliarusis reiškinys – tai trumpas šablonas, aprašantis, kaip turi atrodyti tekstas. Juo tikrinami el. pašto adresai, telefonų numeriai, datos, ieškomos ir keičiamos teksto dalys. Tas pats šablonas, su nedideliais skirtumais, veikia beveik visose programavimo kalbose.

Tikrintuvas

/ /
 

    Paruošti šablonai

    Kodas programavimo kalbai

    Meta ir valdomieji simboliai

    Pavyzdžiai lyginami su visa eilute. Spustelėk eilutę – pavyzdys įsikels į tikrintuvą.

    SimbolisAprašymasPavyzdysTinkaNetinka
    [ ]Vienas simbolis iš nurodytųa[hgz]c„agc“ „azc“„ahgzc“ „abc“
    [a-z]Simbolių intervalas[a-f]+„cafe“ „bad“„kava“
    [^ ]Grupės neigimas – bet kas, tik ne nurodytia[^_-]c„abc“ „a5c“„a_c“ „a-c“
    \Ekranavimas – valdomasis simbolis tampa paprastu\+370„+370“„370“
    .Bet koks vienas simbolisa.c„abc“ „a-c“„ac“ „abbc“
    *Nulis ar daugiau kartų (gali ir nebūti)[abc]*„bbc“ „a“ „“„hhg“ „z“
    +Vienas ar daugiau kartų[a-z]+„user“ „u“„12345“ „“
    ?Nulis arba vienas kartas\+?[0-9]+„+37000000“ „6980000“„++370“
    {n}Tiksliai n kartų[0-9]{8}„12345678“„12“ „123456789“
    {n,m}Nuo n iki m kartų[0-9]{6,9}„123456“ „123456789“„12“ „1234567890“
    {n,}Mažiausiai n kartų[0-9]{6,}„123456“ „1234567890123“„1“ „12345“
    {0,m}Daugiausiai m kartų (rašyk {0,m} – trumpinys {,m} daugelyje kalbų neveikia)[0-9]{0,6}„123456“ „12“„1234567“
    |Arba(katė|šuo)„katė“ „šuo“„kiaulė“
    ( )Grupė – kartojama arba prisimenama kaip visuma(ab)+„ab“ „abab“„aba“
    ^Eilutės pradžia^V„Vilniaus miestas“„Kauno miestas“
    $Eilutės pabaigamiestas$„Vilniaus miestas“„Vilniaus rajonas“
    \dSkaitmuo, tas pats kas [0-9]\d{3}„123“„12a“
    \wRaidė, skaitmuo arba _\w+„vardas_1“„vardas-1“
    \sTarpas, tabuliacija ar naujos eilutės simbolisa\sb„a b“„ab“
    \bŽodžio riba\bkat„katinas“„pakatas“
    (?= )Žvilgsnis į priekį – toliau tekste turi būti…(?=.*[0-9]).{4,}„abc1“„abcd“

    Simbolių grupės (PHP)

    POSIX klasės rašomos tik laužtiniuose skliaustuose: [[:alpha:]]+, ne [:alpha:]+. Jas palaiko PHP preg_ funkcijos ir Perl; JavaScript, Python, C# ir VB – ne, ten naudok atitikmenį.

    GrupėAprašymasAtitikmuo
    [a-zA-Z]raidė (lotyniška)[[:alpha:]]
    [0-9]skaitmuo\d
    [[:alpha:]]raidė[a-zA-Z]
    [[:digit:]]skaitmuo\d, [0-9]
    [[:alnum:]]raidė arba skaitmuo[a-zA-Z0-9]
    [[:word:]]raidė, skaitmuo arba _ (tik PCRE)\w
    [[:space:]]tarpas, tabuliacija, naujos eilutės simboliai\s
    [[:blank:]]tik tarpas ir tabuliacija[ \t]
    [[:cntrl:]]valdymo simboliai (kodai 0–31 ir 127)[\x00-\x1F\x7F]
    [[:lower:]]mažosios raidės[a-z]
    [[:upper:]]didžiosios raidės[A-Z]
    [[:xdigit:]]šešioliktainis skaitmuo: 0–9, a–f, A–F[0-9a-fA-F]
    [[:punct:]]skyrybos ir kiti matomi ne raidiniai ženklai[!-\/:-@\[-`{-~]

    Iš kur atsirado regex – įdomūs faktai

    • 1943Neurofiziologas W. McCullochas ir logikas W. Pittsas aprašo dirbtinio neurono modelį. Būtent iš jo tyrinėjimo vėliau ir gimė reguliarieji reiškiniai – jie atsirado kaip būdas aprašyti, ką „atpažįsta“ nervų tinklas.
    • 1951Amerikiečių matematikas Stephenas Cole Kleene RAND korporacijos ataskaitoje aprašo „reguliariuosius įvykius“ ir jų algebrą (plačiai išspausdinta 1956 m.). Žvaigždutė * iki šiol vadinama Kleene žvaigžde.
    • 1968Kenas Thompsonas (vėliau – Unix ir C kalbos bendraautoris) įdiegia regex teksto redaktoriuje QED. Šablonus jis kompiliavo tiesiai į IBM 7094 mašininį kodą – tai buvo viena pirmųjų JIT kompiliacijos idėjų.
    • 1973Unix sistemoje atsiranda grep. Pavadinimas kilęs iš redaktoriaus ed komandos g/re/p – global / regular expression / print.
    • 1986Henry Spenceris parašo laisvai platinamą regex biblioteką, kurią vėliau perėmė daugybė programų.
    • 1987Larry Wallas sukuria Perl. Jo regex sintaksė tapo faktiniu standartu, kurį šiandien kopijuoja beveik visos kalbos.
    • 1997Philipas Hazelis išleidžia PCRE (Perl Compatible Regular Expressions). Būtent ją naudoja PHP preg_ funkcijos (nuo PHP 7.3 – PCRE2). Senosios POSIX ereg() funkcijos iš PHP 7.0 pašalintos.
    • 1997Programuotojas Jamie Zawinskis pajuokavo: kai kurie žmonės, susidūrę su problema, nusprendžia ją spręsti regex – „ir dabar jie turi dvi problemas“. Frazė tapo programuotojų folkloru.
    • 2016Stack Overflow 34 minutes neveikė dėl vieno regex, kuris valė tarpus įraše su ~20 000 tarpų iš eilės – variklis įstrigo nesibaigiančiame grįžimų (backtracking) cikle.
    • 2019Liepos 2 d. visame pasaulyje ~27 min. sutriko Cloudflare: viena nauja regex taisyklė ugniasienėje apkrovė serverių procesorius iki 100 %. Toks atakos tipas vadinamas ReDoS.
    • FaktasŠiuolaikiniai „regex“ su atgalinėmis nuorodomis (\1) matematine prasme jau nebėra „reguliarūs“ – jie gali atpažinti daugiau, nei leidžia Kleene teorija, todėl kai kurie šablonai gali dirbti eksponentiškai ilgai.
     
     
     
     
    © 2005 - 2026   Fromris, UAB    v3.3.15   2026-11-15 00:14:12
    Kontaktams | Apie įmonę
     

    Skelbimai, akvariumų kainos:

    Juodas, lengvas gruntas akvariumui, skatina augalų augimą: Jbl Manado Dark

    Stilingas led šviestuvas akvariumui: AQUAEL Leddy 10w

    CO2 tirpintuvas akvariumui, molonu akiai kai burbuliukai ritmiškai kyla ir mažėja: Dennerle Co2 Flipper