PB173 Perl 07 Operácie na reťazcoch, regulárne výrazy Roman Lacko Obsah Reťazcové operácie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1 Regulárne výrazy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  17 Reťazcové operácie Reťazce v Perli sme doteraz používali pomerne intuitívne. Pre zhrnutie: • Reťazce sú skaláry, nie polia. • Veľkosť je uložená interne, nepoužívajú terminálny bajt \0 say length "abc\0def"; # 7 printf("%d\n", strlen("abc\0def")); // 3 • Môžu sa chovať rôznym spôsobom podľa kódovania. PB173 Perl 1 / 31 Reťazcové literály Zatiaľ sme videli konštrukciu reťazcov pomocou úvodzoviek (quotes) a zodpovedajúcich operátorov (quote operators): say 'User $ENV{USER}'; # User $ENV{USER} say q"Use $ENV{USER}"; # Same thing say "User $ENV{USER}"; # User pazuzu say qq'Use $ENV{USER}'; # Same thing  Operátory q a qq nemenia svoj význam, ani keď sa skombinujú s "" alebo ''. Viď ex01t-literals.pl. PB173 Perl 2 / 31 Špeciálne znaky v reťazcoch V reťazcoch s interpoláciou sa môžu nachádzať rôzne špeciálne značky: \t, \n, \r, … Tabulátor, koniec riadka, carriage retturn, … (ako v C) \xNN, \NNN Bajt zadaný hexadecimálne alebo oktálne. \x{XXXX}, \o{OOOO} Unicode znak zadaný v hexadecimálnej alebo oktálnej sústave. \N{NAME}, \N{U+XXXX} Unicode znak zadaný názvom alebo jeho U+NNNN sekvenciou.  \x a \o nemusia byť vždy ASCII, záleží od platformy. \N{} je vždy Unicode. PB173 Perl 3 / 31 Here documents Dlhšie odstavce textu je možné vypísať pomocou Here documents ako v Shelli: print <α) zachytí hodnotu do \g{NAME} a $+{NAME} (?'NAME'α) ako (?α) (?|α|β|…) rovnaké číslovanie skupín v α, β atď. (?{ CODE }) volanie kódu z RE (??{ CODE }) dosadenie výrazu pri vyhodnocovaní RE (?(COND)α) podmienený výraz (?(COND)α|ω) podmienený výraz s else vetvou PB173 Perl 30 / 31 Test okolia Test, či sa v okolí vzoru nachádza iný vzor. (?=α) pohľad dopredu (?!α) negatívny pohľad dopredu (?<=α) pohľad dozadu (?