Vijëza brenda grupeve në regex PHP

Vijëza - gjithashtu është karakter special brenda [] (por jashtë - jo). Nëse keni nevojë për vijëzën vetë si karakter - atëherë vendoseni aty, ku ajo nuk do të perceptohet si ndarës i grupit.

Pse kjo është e rëndësishme: ju mund të bëni një grup karakteresh, pa e vënë re vetë. Për shembull, kështu - [:-@] - ju mendoni, se po zgjidhni dy pika, vijëz dhe simbolin @, por në të vërtetë rezulton një grup karakteresh midis : dhe @. Në këtë grup përfshihen karakteret e mëposhtme: :, ;, ?, <, =, >.

Nga erdhën ata? Nga tabela ASCII - dy pikat kanë numër më të vogël, se simboli @ - dhe kështu fitohet grupi. Domethënë të gjitha grupet fitohen sipas tabelës ASCII (nëse dëshironi kësaj mund t'i përfitoni).

Si të luftohet kjo: vendosni karakterin e vijëzës aty, ku ajo me siguri nuk do të perceptohet si karakter grupi, për shembull, në fillim ose në fund (dmth pas [ ose para ]).

Mundeni gjithashtu ta ekranizoni vijëzën - atëherë ajo do të tregojë vetë pavarësisht nga pozita. Për shembull, në vend të [:-@] shkruani [:\-@] - dhe grupi tashmë nuk do të jetë, por do të jenë tre karaktere - dy pika, vijëz dhe simboli @.

Shembull

Në shembullin vijues modeli i kërkimit është: shifra 1, pastaj shkronja nga 'a' deri në 'z', pastaj shifra 2:

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

Si rezultat në variabël do të shkruhet si më poshtë:

php'! 1-2 ! !'

Shembull

Tani le ta ekranizojmë vijëzën. Si rezultat modeli i kërkimit është: shifra 1, pastaj shkronja 'a', ose vijëz, ose shkronja 'z', pastaj shifra 2:

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

Si rezultat në variabël do të shkruhet si më poshtë:

php'! ! 1c2 !'

Shembull

Mund thjesht ta ndërroni vendin e vijëzës, pa e ekranizuar atë:

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

Si rezultat në variabël do të shkruhet si më poshtë:

php'! ! 1c2 !'

Shembull

Në shembullin vijues modeli i kërkimit është: karakteri i parë - janë shkronja të vogla ose vijëz '-', pastaj dy shkronja 'x':

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

Si rezultat në variabël do të shkruhet si më poshtë:

php'! Axx ! @xx'

Shembull

Në shembullin vijues modeli i kërkimit është: karakteri i parë - janë shkronja të vogla, të mëdha ose vijëz '-', pastaj dy shkronja 'x':

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

Si rezultat në variabël do të shkruhet si më poshtë:

php'! ! ! @xx'

Shembull

Mund të vendosni vijëzën midis dy grupeve - aty ajo me siguri nuk do të krijojë një grup tjetër:

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

Si rezultat në variabël do të shkruhet si më poshtë:

php'! ! ! @xx'

Detyra praktike

Задание 1

Është dhënë stringu:

php<?php
  $str = 'xaz xBz xcz x-z x@z';
?>

Gjeni të gjitha stringjet sipas modelit vijues: shkronja 'x', shkronjë e madhe ose e vogël ose vijëz, shkronja 'z'.

Задание 2

Është dhënë stringu:

php<?php
  $str = 'xaz x$z x-z xcz x+z x%z x*z';
?>

Gjeni të gjitha stringjet sipas modelit vijues: shkronja 'x', pastaj ose dollar, ose vijëz ose plus, pastaj shkronja 'z'.