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<?php
  $str = '1a2 1-2 1c2 1z2';
  $res = preg_replace('#1[a-z]2#', '!', $str);
?>

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! 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<?php
  $str = '1a2 1-2 1c2 1z2';
  $res = preg_replace('#1[a\-z]2#', '!', $str);
?>

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! ! 1c2 !'

Piemērs

Var vienkārši pārvietot defisi, to neaizbīdot:

php<?php
  $str = '1a2 1-2 1c2 1z2';
  $res = preg_replace('#1[az-]2#', '!', $str);
?>

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! ! 1c2 !'

Piemērs

Nākamajā piemērā meklēšanas šablons ir šāds: pirmais simbols - ir mazie burti vai defise '-', tad divi 'x' burti:

php<?php
  $str = 'axx Axx -xx @xx';
  $res = preg_replace('#[a-z-]xx#', '!', $str);
?>

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! 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<?php
  $str = 'axx Axx -xx @xx';
  $res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! ! ! @xx'

Piemērs

Var novietot defisi starp divām grupām - tur tā noteikti vēl neizveidos citu grupu:

php<?php
  $str = 'axx 9xx -xx @xx';
  $res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>

Rezultātā mainīgajā ierakstīsies sekojošais:

php'! ! ! @xx'

Praktiskie uzdevumi

Задание 1

Dota virkne:

php<?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'.

Задание 2

Dota virkne:

php<?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'.