Liniuța în seturile din expresiile regulate PHP
Liniuța - este de asemenea un caracter special în interiorul []
(însă în afară - nu). Dacă aveți nevoie de liniuța ca simbol - atunci plasați-o acolo,
unde nu va fi interpretată ca separator
de grup.
De ce este important: puteți crea un grup
de caractere, fără să vă dați seama. De exemplu,
așa - [:-@] - credeți că
selectați două puncte, liniuță și semnul @, dar de
fapt rezultă un grup de caractere între
: și @. În acest grup intră
următoarele caractere: :, ;, ?,
<, =, >.
De unde au apărut? Din tabelul ASCII - două puncte are număr mai mic decât semnul @ - și rezultă un grup. Adică toate grupurile se formează conform tabelului ASCII (dacă doriți, puteți folosi acest lucru).
Cum să rezolvați: plasați simbolul liniuței
acolo, unde cu siguranță nu va fi interpretat ca
simbol de grup, de exemplu, la început sau la sfârșit
(adică după [ sau înainte de ]).
De asemenea, puteți să scăpați liniuța - atunci
ea va reprezenta însăși indiferent de
poziție. De exemplu, în loc de [:-@] scrieți
[:\-@] - și grupul nu va mai exista, ci
vor fi trei simboluri - două puncte, liniuță și semnul @.
Exemplu
În următorul exemplu șablonul de căutare este:
cifra 1, apoi litera de la 'a'
până la 'z', apoi cifra 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
În rezultat, în variabilă se va scrie următorul:
'! 1-2 ! !'
Exemplu
Să scăpăm acum liniuța. În rezultat
șablonul de căutare este: cifra 1, apoi
litera 'a', sau liniuță, sau litera 'z',
apoi cifra 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
În rezultat, în variabilă se va scrie următorul:
'! ! 1c2 !'
Exemplu
Puteți pur și simplu să mutați liniuța, fără a o scăpa:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
În rezultat, în variabilă se va scrie următorul:
'! ! 1c2 !'
Exemplu
În următorul exemplu șablonul de căutare este:
primul simbol - este litere mici sau
liniuță '-', apoi două litere 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
În rezultat, în variabilă se va scrie următorul:
'! Axx ! @xx'
Exemplu
În următorul exemplu șablonul de căutare este:
primul simbol - este litere mici, litere mari
sau liniuță '-', apoi două litere
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
În rezultat, în variabilă se va scrie următorul:
'! ! ! @xx'
Exemplu
Puteți plasa liniuța între două grupuri - acolo cu siguranță nu va mai crea încă un grup:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
În rezultat, în variabilă se va scrie următorul:
'! ! ! @xx'
Probleme practice
Este dat șirul:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Găsiți toate șirurile conform următorului șablon:
litera 'x', literă mare sau mică
sau liniuță, litera 'z'.
Este dat șirul:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Găsiți toate șirurile conform următorului șablon:
litera 'x', apoi sau dolar, sau
liniuță sau plus, apoi litera 'z'.