Grupe simbola u regularnim izrazima PHP

Postoje specijalne komande koje omogućavaju odabir čitavih grupa simbola odjednom. Komanda \d označava cifru od 0 do 9. Komanda \w označava cifru, latinično slovo ili znak donje crte. Komanda \s označava razmak ili beli prostor (whitespace): razmak, prelazak u novi red, tabulator. Vrednost komande se može invertovati pisanjem velikog slova: na primer, ako je \d cifra, onda je \D sve osim cifre.

Primer

Hajde da pronadjemo sve cifre:

php<?php
  $str = '1 12 123';
  $res = preg_replace('#\d#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! !! !!!'

Primer

Operator ponavljanja tretira grupe komandi kao jednu celinu, što znači da zagrade za grupisanje nisu potrebne. U sledećem primeru šablon pretrage izgleda ovako: cifra od 0 do 9 jedan ili više puta:

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\d+#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! ! ! abc @@@'

Primer

U sledećem primeru šablon pretrage izgleda ovako: bilo šta jedan ili više puta, ali ne cifra od 0 do 9:

php<?php
  $str = '123abc3@@';
  $res = preg_replace('#\D+#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'123!3!'

Primer

U ovom primeru šablon pretrage izgleda ovako: simbol belog prostora jedan put:

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\s#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'1!12!123!abc!@@@'

Primer

U ovom primeru šablon pretrage izgleda ovako: NIKO simbol belog prostora jedan ili više puta. Svi podstringovi, razdvojeni razmacima, biće zamenjeni sa '!':

php<?php
  $str = '1 12 123 abc @@@';
  $res = preg_replace('#\S+#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! ! ! ! !'

Primer

U ovom primeru šablon pretrage izgleda ovako: cifra ili slovo jedan ili više puta. Svi podstringovi koji se sastoje od cifara i slova biće zamenjeni sa '!':

php<?php
  $str = '1 12 123a Abc @@@';
  $res = preg_replace('#\w+#', '!', $str);
?>

Kao rezultat, u promenljivu će biti upisano sledeće:

php'! ! ! ! @@@'

Primer

U ovom primeru šablon pretrage izgleda ovako: NIKO cifra i NIKO slovo jedan ili više puta. Prema ovoj definiciji u našem slučaju spadaju '@@@' i svi razmaci (jer oni takođe nisu ni cifre ni slova). Obratite pažnju na to da na kraju postoji jedna '!' - u nju je transformisan string ' @@@' - sa razmakom ispred:

php$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);

Kao rezultat, u promenljivu će biti upisano sledeće:

php'1!12!123!Abc!'

Praktični zadaci

Задание 1

Dat je string:

php<?php
  $str = 'a1a a2a a3a a4a a5a aba aca';
?>

Napišite regularni izraz koji će pronaći stringove, u kojima sa obe strane stoje slova 'a', a između njih je jedna cifra.

Задание 2

Dat je string:

php<?php
  $str = 'a1a a22a a333a a4444a a55555a aba aca';
?>

Napišite regularni izraz koji će pronaći stringove, u kojima sa obe strane stoje slova 'a', a između njih je bilo koji broj cifara.

Задание 3

Dat je string:

php<?php
  $str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>

Napišite regularni izraz koji će pronaći stringove, u kojima sa obe strane stoje slova 'a', a između njih je bilo koji broj cifara (uključujući i nulu cifara, odnosno string 'aa').

Задание 4

Dat je string:

php<?php
  $str = 'avb a1b a2b a3b a4b a5b abb acb';
?>

Napišite regularni izraz koji će pronaći stringove sledećeg oblika: sa obe strane stoje slova 'a' i 'b', a između njih - ne cifra.

Задание 5

Dat je string:

php<?php
  $str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>

Napišite regularni izraz koji će pronaći stringove sledećeg oblika: sa obe strane stoje slova 'a' i 'b', a između njih - nije slovo i nije cifra.

Задание 6

Dat je string:

php<?php
  $str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>

Napišite regularni izraz koji će zameniti sve razmake sa '!'.