Množiny znaků v regulárních výrazech PHP

Skupiny znaků \d a \w nejsou příliš flexibilní. Dokonce i tak jednoduchý úkol, jako najít všechna písmena, ale ne číslice - nemůže být jimi vyřešen. Pro takové úlohy by se měly použít hranaté závorky, které představují operaci NEBO.

Hranaté závorky nahrazují jeden znak, libovolný z těch uvedených uvnitř. Například takto: #x[abc]x# - říkáme, že na okrajích musí být písmena x, a uvnitř - jeden znak: nebo 'a', nebo 'b', nebo 'c'.

Za hranatými závorkami lze psát operátory opakování. Například takto: #x[abc]+x# - říkáme, že uvnitř x může být libovolné množství znaků 'a', 'b' a 'c' - v libovolných kombinacích.

Lze nejen vypisovat znaky, ale vytvářet skupiny znaků zápisem mezi dva znaky pomlčku. Například takto: #[a-d]# - získáme všechny znaky od 'a' do 'd'.

Podívejme se na příkladech.

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolné písmeno od 'a' do 'z':

php<?php
  $str = 'xax xbx xcx x@x';
  $res = preg_replace('#x[a-z]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'! ! ! x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolné písmeno od 'a' do 'k':

php<?php
  $str = 'xax xbx xmx x@x';
  $res = preg_replace('#x[a-k]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'! ! xmx x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolné písmeno od 'A' do 'Z':

php<?php
  $str = 'xax xBx xcx x@x';
  $res = preg_replace('#x[A-Z]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'xax ! xcx x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolná číslice od 0 do 9:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[0-9]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'xax ! ! ! x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolná číslice od 3 do 7:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[3-7]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'xax x1x ! ! x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolné písmeno od 'a' do 'z' nebo číslice od 1 do 9:

php<?php
  $str = 'xax x1x x3x x5x x@x';
  $res = preg_replace('#x[a-z1-9]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'! ! ! ! x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolné písmeno od 'a' do 'z' nebo písmeno od 'A' do 'Z':

php<?php
  $str = 'xax xBx xcx x5x x@x';
  $res = preg_replace('#x[a-zA-Z]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'! ! ! x5x x@x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x libovolné písmeno od 'a' do 'z' nebo číslice 1, 2:

php<?php
  $str = 'xax xbx x1x x2x x3x';
  $res = preg_replace('#x[a-z12]x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'! ! ! ! x3x'

Příklad

V tomto příkladu vypadá vzor hledání takto: mezi x písmena od 'a' do 'z' v množství od 1 a více:

php<?php
  $str = 'xx xabesx xaadx x123x xa3x';
  $res = preg_replace('#x[a-z]+x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'xx ! ! ! x123x xa3x'

Příklad

Udělejme to, aby množství písmen mohlo být i nula:

php<?php
  $str = 'xx xabesx xaadx x123x xa3x';
  $res = preg_replace('#x[a-z]*x#', '!', $str);
?>

Výsledkem bude do proměnné zapsáno následující:

php'! ! ! x123x xa3x'

Praktické úlohy

Задание 1

Je dán řetězec:

php<?php
  $str = 'aba aea aca aza axa';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - písmeno 'b', 'e' nebo 'x'.

Задание 2

Je dán řetězec:

php<?php
  $str = 'a1a a3a a7a a9a aba';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - číslice od 3-ch do 6-ti.

Задание 3

Je dán řetězec:

php<?php
  $str = 'aba aea afa aha aga';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - písmeno od a do g.

Задание 4

Je dán řetězec:

php<?php
  $str = 'aba aea afa aha aga';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - písmeno od a do f a od j do z.

Задание 5

Je dán řetězec:

php<?php
  $str = 'aAa aea aEa aJa a3a';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - písmeno od a do f a od A do D.

Задание 6

Je dán řetězec:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - malá latinská písmena, aniž by se dotkl ostatních.

Задание 7

Je dán řetězec:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - malá a velká latinská písmena, aniž by se dotkl ostatních.

Задание 8

Je dán řetězec:

php<?php
  $str = 'aAXa aeffa aGha aza ax23a a3sSa';
?>

Napište regulární výraz, který najde podle následujícího vzoru: na okrajích jsou písmena 'a', a mezi nimi - malá latinská písmena a číslice, aniž by se dotkl ostatních.