Regular Expressions

Pameegjinaashu biku apskaidrot Regural Expressions pamatsintaxi. Varbuut, ka kaads jau ir uzraxtiijis latvieshu valodaa, bet es dziivoju alaa un neko nezinu ;p. Taatad Regular Expressions pamatsintaxe...

 

Pamata sintaxe..
Saaxim ar diwiem simboliem - "^" un "$".
^Bla - teksts, kursh saakas ar "Bla";
ira beigaz$ - teksts, kura beigas ir "ira beigaz";
^abc$ - teksts, kursh saakas un beidzas ar "abc" [iisteniibaa jau tas arii var tikai buut "abc" ;p];
bubu - teksts, kursh satur "bubu".

Taalaak par '*', '+', un '?', kuri apziimee cik reizes burc vai burtu kopa driixt atkaartoties. Tas noziimee: "nulle vai vairaak", "vienc vai vairaak", un "nulle vai vienc". Reku dazhi samplji, lai labaak saprastu:
ab* - teksts, kuram ir neviens vai vairaak "b" burtu. Tie ir "a", "ab", "abb", utt.;
ab+ - tas pac, tikai te vaidziix vismaz vienc "b". Tie ir "ab", "abbb", utt.;
ab? - te "b" vai nu var buut vai arii nee;
a?b+$ - iespeejami vienc un vairaaki "b" teksta beigaas..

Kontuuriekavaas var noraadiit apgabalu:
ab{2} - atbilst tekstam, kuram ir diwi "b" ("abb");
ab{2,} - a titam vaig vismaz diwus "b".. "abb", "abbbb", utt.;
ab{3,5} - driixt buut 3-5 "b".. "abbb", "abbbb", vai "abbbbb".

Piebilde. Vienmeer vaig noraadiit pirmo skaitli (t.i., "{0,2}", nevis "{,2}").

Tagad paars samplji apvienojot ieprieksheejos piemeerus..
a(bc)* - atbilst tekstam ar nevienu vai vairaakiem "bc";
a(bc){1,5} - viena liidz piecas kopijas ar "bc".

Ir veel taac '|' simbols, kursh straadaa kaa OR operators:
gy|wazaap - atbilst tekstam, kuraa ir "gy" vai "wazaap";
(b|cd)ef - teksts, kuraa ir "bef" vai "cdef";
(a|b)*c - teksts, kura beigas ir ar/bez "a" vai "b" ar "c".

Punkc ('.') noziimee vienu simbolu:
a.[0-9] - teksts, kuram, seko viens simbols un cipars;
^.{3}$ - teksts ar 3 simboliem.

Izteiksmes kwadraatiekavaas noraada, kuri simboli ir atljauti (vienaa poziicijaa, viens simbols):
[ab] - teksts, kursh satur "a" vai "b" (tas pac kas "a|b");
[a-d] - teksts, kas satur tikai mazos burtus no "a" liidz "d" (akal tas pac, kas "a|b|c|d" vai "[abcd]");
^[a-zA-Z] - teksts, kursh saakas ar burtu;
[0-9]% - viens cipars pirms "%" ziimes;
,[a-zA-Z0-9]$- teksts, kursh beidzas ar komatu un turpinaas ar burtu vai ciparu.

Var arii, protams, noraadiit, kurus simbolus negrib izmantot - vienkaarshi jaaizmanto "^" kaa pirmais simbols kwadraatiekavaas (t.i., %[^a-zA-Z]% - starp diwaam "%" ziimeem nedriixt atrasties burc).

Lai izmantotu literaaraa veidaa "^.[$()|*+?{\", priekshaa jaapiemet slashu "\".
Tikai in da PHP vaig arii to slashu noslashot. Tjipa (\$|!)[0-9]+ in da PHP buus - ereg("(\\$|!)[0-9]+", $str).


Valiidas naudinjas..
Taax. Nu jau mees esam iemaaciijushies sho to un varam jau izdariit ko deriigu: uzcept regulaaro expressionu, kas paarbauda lietotaaja ievadiito naudinju. Naudinju var ieraxtiit 4os veidos: "10000.00" un "10,000.00", un, bez santiimiem, "10000" un "10,000". Nju tad saakam..

^[1-9][0-9]*$ - paarbauda vai nesaakas ar 0, bet rodas viena probleema, ja skaitlis ir 0. risinaajums ir
^(0|[1-9][0-9]*)$ - tikai nulle vai kaads cits nummurs, kursh nesaakas ar nulli.
Veel buutu arii veelams atljaut miinusus. ^(0|-?[1-9][0-9]*)$ Titais noziime, ka var buut tikai nulle vai arii "-" un kaads skaitlis, kursh nesaakas ar nulli.
Labi, nebuusim ljauni un atljausim juuzerim raxtiit ar 0 un "-" ziimi ar atnjemsim. Labaak pielixim komatu ;p
^[0-9]+(\.[0-9]{1,2})?$ Aiz komata (punkta) valiidi buus nevienc, vienc vai diwi cipari.
Laikam jau veel gribam veel arii atdaliit ar apostrofu shur tur lieliem skaitljiem..
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$
Tas arii viss. Neaizmistam, ka "+" var aizstaat ar "*", ja negribam, neko ievadiit. Protams, nedriixt arii aizmirst noslashot "\" ;p.


Valiids e-mails..
Taax.. Kaa zinam, mailiem ir triis daljas juuzeris@serveris.com. Juuzerneimaa driixt buut visi burti, cipari, punkc, miinus ziime un pasviitrojums ("_"). Uz servera neimu attiecas tas pats iznjemot pasviitrojumu.
^[_a-zA-Z0-9-]+$ - titais veel mums neatljauj punktu..
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$ - taga varam arii likt punktu..
Par cik eregi() naw case-sensetive [nemana shkjirbu starp lieliem un maziem burtiem], tad var atbriivoties no "A-Z"..
^[a-z0-9-]+(\.[a-z0-9-]+)*$ - serwera nosaukumam tas pac, ka lietotaajam, tikai bez "_"..
un taga saliekam kopaa.. ;p
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

Njekaa iipasha..
A taga jaasaak lasiit PHP manuaali ;p
Ir taadas norm funkcijas kaa eregi() un ereg()..
Piem.. samplis, kaa dabuut failneimu no URLa..
ereg("([^\\/]*)$", $pathOrUrl, $regs);
echo $regs[1];


Tikpat noderiigas lietas ir ereg_replace() un eregi_replace()..
ereg_replace("[ \n\r\t]+", ",", trim($str)); - shis, piemeeram, atdala visus vaardus textaa ar komatiem

Tas arii viss. Kaa redzi, nemaz nav tik gruuti kaa varbuut pirmajaa mirklii likaas taadus 'zveerus' ieraugot ;p.
[Ja kaut kur esmu samurgojis greizi, tad palabojiet.]

Komentāri

  • Nezinu neko par regulārajām izteiksmēm, bet loìiski domājot šim negribētu piekrist:
    ^abc$ - teksts, kursh saakas un beidzas ar "abc" [iisteniibaa jau tas arii var tikai buut "abc" ;p];

    Tiešāk negribas piekrist tai tava piebildei. Vai tad piemēram nevarētu būt abcbumbumbubabc ?

  • ne-e.
    es vienkaarshi neesmu iisti pareizi izteicies.. doma ir taada, ka starp saakumu un beigaam ir "abc".

    btw.. shis raxc ir taads ne paaraak nopietns pa shito teemu. Varbuut kaadreiz, ja buus laika, uzraxtiishu plashaak un biku nopietnaak.

Pievienot komentāru