Defiseņu lietošana regulāro izteiksmju kopās PHP
Defise ir arā speciāls simbols [] iekšpusē
(ārpusē - nav). Ja jums vajag pašu defisi kā simbolu - tad novietojiet to tur,
kur tas netiks uztverts kā grupas atdalītājs.
Kāpēc tas ir svarīgi: jūs varat nevēloties izveidot simbolu grupu.
Piemēram, šādi - [:-@] - jūs domājat, ka
izvēlaties kolu, defisi un @ simbolu, bet
patiesībā izveidojas simbolu grupa starp
: un @. Šajā grupā ietilpst
šādi simboli: :, ;, ?,
<, =, >.
No kurienes tie nāk? No ASCII tabulas - kola ir ar mazāku numuru nekā @ simbols - un tā veidojas grupa. Tas nozīmē, ka visas grupas veidojas pēc ASCII tabulas (ja vēlas, ar to var izmantot).
Kā ar to cīnīties: novietojiet defises simbolu
tur, kur tas noteikti netiks uztverts kā
grupas simbols, piemēram, sākumā vai beigās
(tas ir, aiz [ vai pirms ]).
Var arī aizbīdīt defisi - tad
tā apzīmēs sevi neatkarīgi no
pozīcijas. Piemēram, [:-@] vietā rakstīt
[:\-@] - un grupas vairs nebūs, bet
būs trīs simboli - kols, defise un @ simbols.
Piemērs
Nākamajā piemērā meklēšanas šablons ir šāds:
cipars 1, tad burts no 'a'
līdz 'z', tad cipars 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! 1-2 ! !'
Piemērs
Tagad aizbīdīsim defisi. Rezultātā
meklēšanas šablons ir šāds: cipars 1, tad
burts 'a', vai defise, vai burts 'z',
tad cipars 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! ! 1c2 !'
Piemērs
Var vienkārši pārvietot defisi, to neaizbīdot:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! ! 1c2 !'
Piemērs
Nākamajā piemērā meklēšanas šablons ir šāds:
pirmais simbols - ir mazie burti vai
defise '-', tad divi 'x' burti:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! Axx ! @xx'
Piemērs
Nākamajā piemērā meklēšanas šablons ir šāds:
pirmais simbols - ir mazie, lielie
burti vai defise '-', tad divi 'x' burti:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! ! ! @xx'
Piemērs
Var novietot defisi starp divām grupām - tur tā noteikti vēl neizveidos citu grupu:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Rezultātā mainīgajā ierakstīsies sekojošais:
'! ! ! @xx'
Praktiskie uzdevumi
Dota virkne:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Atrodiet visas virknes pēc šāda šablona:
burts 'x', lielais vai mazais
burts vai defise, burts 'z'.
Dota virkne:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Atrodiet visas virknes pēc šāda šablona:
burts 'x', tad vai nu dollara zīme, vai
defise vai plus zīme, tad burts 'z'.