Цртичка внутри набори во регуларните изрази на PHP
Цртичката - исто така е специјален симбол внутри []
(а надвор - не). Ако ви треба самата
цртичка како симбол - тогаш ставете ја таму,
каде што нема да биде сфатена како разделител
на група.
Зошто ова е важно: можете да направите група
симболи, без самите да забележите. На пример,
вака - [:-@] - вие мислите дека
избирате две точки, цртичка и симболот @, а всушност
се добива група симболи помеѓу
: и @. Во оваа група влегуваат
следниве симболи: :, ;, ?,
<, =, >.
Од каде се појавиле тие? Од табелата ASCII - две точки имаат помал број, од симболот @ - и се добива група. Односно сите групи се добиваат според табелата ASCII (ако се посака со ова може да се користи).
Како да се борите со ова: ставете го симболот цртичка
таму, каде што дефинитивно нема да биде сфатен како
симбол на група, на пример, на почетокот или на крајот
(односно после [ или пред ]).
Можно е исто така да се екранира цртичката - тогаш
таа ќе го означува самиот себеси независно од
позицијата. На пример, наместо [:-@] да се напише
[:\-@] - и група веќе нема да има, а
ќе има три симболи - две точки, цртичка и симбол @.
Пример
Во следниот пример шаблонот за пребарување е ваков:
број 1, потоа буква од 'a'
до 'z', потоа број 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! 1-2 ! !'
Пример
Ајде сега да ја екранираме цртичката. Како резултат
шаблонот за пребарување е ваков: број 1, потоа
буква 'a', или цртичка, или буква 'z',
потоа број 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! ! 1c2 !'
Пример
Може едноставно да се премести цртичката, без да се екранира:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! ! 1c2 !'
Пример
Во следниот пример шаблонот за пребарување е ваков:
прв симбол - тоа се мали букви или
цртичка '-', потоа две букви 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! Axx ! @xx'
Пример
Во следниот пример шаблонот за пребарување е ваков:
прв симбол - тоа се мали, големи
букви или цртичка '-', потоа две букви
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! ! ! @xx'
Пример
Може да се постави цртичка помеѓу две групи - таму таа дефинитивно нема да направи уште една група:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! ! ! @xx'
Практични задачи
Дадена е низа:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Пронајдете ги сите низи според следниов шаблон:
буква 'x', голема или мала
буква или цртичка, буква 'z'.
Дадена е низа:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Пронајдете ги сите низи според следниов шаблон:
буква 'x', потоа или долар, или
цртичка или плус, потоа буква 'z'.