Množiny znakov v regulárnych výrazoch PHP
Skupiny znakov \d a \w nie sú
veľmi flexibilné. Dokonca aj taká jednoduchá úloha,
ako nájsť všetky písmená, ale nie čísla -
nemôže byť vyriešená nimi. Pre takéto úlohy
by sa mali použiť hranaté zátvorky, ktoré predstavujú
operáciu ALEBO.
Hranaté zátvorky nahrádzajú jeden znak,
akýkoľvek z uvedených vnútri. Napríklad,
takto: #x[abc]x# - hovoríme, že
na okrajoch musia byť písmená x, a vnútri
- jeden znak: alebo 'a', alebo 'b',
alebo 'c'.
Za hranatými zátvorkami je možné písať operátory
opakovania. Napríklad, takto: #x[abc]+x#
- hovoríme, že vnútri x môže byť
ľubovoľný počet znakov 'a', 'b'
a 'c' - v ľubovoľných kombináciách.
Je možné nielen vymenovávať znaky, ale vytvárať
skupiny znakov, zapisovaním medzi dva znaky
pomlčku. Napríklad, takto: #[a-d]#
- dostaneme všetky znaky od 'a' do
'd'.
Pozrime sa na príklady.
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľné písmeno od 'a'
do 'z':
<?php
$str = 'xax xbx xcx x@x';
$res = preg_replace('#x[a-z]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'! ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľné písmeno od 'a'
do 'k':
<?php
$str = 'xax xbx xmx x@x';
$res = preg_replace('#x[a-k]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'! ! xmx x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľné písmeno od 'A'
do 'Z':
<?php
$str = 'xax xBx xcx x@x';
$res = preg_replace('#x[A-Z]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'xax ! xcx x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľná číslica od 0 do 9:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[0-9]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'xax ! ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľná číslica od 3 do 7:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[3-7]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'xax x1x ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľné písmeno od 'a'
do 'z' alebo číslica od 1 do 9:
<?php
$str = 'xax x1x x3x x5x x@x';
$res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'! ! ! ! x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľné písmeno od 'a'
do 'z' alebo písmeno od 'A' do
'Z':
<?php
$str = 'xax xBx xcx x5x x@x';
$res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'! ! ! x5x x@x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x ľubovoľné písmeno od 'a'
do 'z' alebo číslice 1, 2:
<?php
$str = 'xax xbx x1x x2x x3x';
$res = preg_replace('#x[a-z12]x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'! ! ! ! x3x'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
medzi x písmená od 'a' do 'z'
v množstve od 1 a viac:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]+x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'xx ! ! ! x123x xa3x'
Príklad
Urobme to tak, aby počet písmen mohol byť aj nula:
<?php
$str = 'xx xabesx xaadx x123x xa3x';
$res = preg_replace('#x[a-z]*x#', '!', $str);
?>
Výsledkom do premennej zapíše nasledovné:
'! ! ! x123x xa3x'
Praktické úlohy
Daný reťazec:
<?php
$str = 'aba aea aca aza axa';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - písmeno 'b', 'e'
alebo 'x'.
Daný reťazec:
<?php
$str = 'a1a a3a a7a a9a aba';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - číslica od 3-ich do 6-tich.
Daný reťazec:
<?php
$str = 'aba aea afa aha aga';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - písmeno od a do g.
Daný reťazec:
<?php
$str = 'aba aea afa aha aga';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - písmeno od a do f a od j do z.
Daný reťazec:
<?php
$str = 'aAa aea aEa aJa a3a';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - písmeno od a do f a od A do D.
Daný reťazec:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - malé latinské písmená,
bez ovplyvnenia ostatných.
Daný reťazec:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - malé a veľké latinské
písmená, bez ovplyvnenia ostatných.
Daný reťazec:
<?php
$str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>
Napíšte regulárny výraz, ktorý nájde podľa nasledujúceho
vzoru: na okrajoch stoja písmená 'a',
a medzi nimi - malé latinské písmená
a číslice, bez ovplyvnenia ostatných.