ტირე ნაკრებების შიგნით PHP-ის რეგულარულ გამოსახულებებში

ტირე - ასევე სპეციალური სიმბოლოა []-ის შიგნით (გარეთ კი - არა). თუ თქვენ გჭირდებათ თავად ტირე, როგორც სიმბოლო - მაშინ მოათავსეთ ის იქ, სადაც ის არ აღიქმება, როგორც ჯგუფის გამყოფი.

რატომ არის ეს მნიშვნელოვანი: თქვენ შეგიძლიათ შექმნათ სიმბოლოთა ჯგუფი, თავად ამის შეუმჩნევლად. მაგალითად, აი ასე - [:-@] - თქვენ ფიქრობთ, რომ ირჩევთ მრვიწყოებას, ტირეს და სიმბოლოს @, როდესაც სინამდვილეში მიიღება სიმბოლოთა ჯგუფი :-სა და @-ს შორის. ამ ჯგუფში შედის შემდეგი სიმბოლოები: :, ;, ?, <, =, >.

საიდან გაჩნდნენ ისინი? ASCII-ის ცხრილიდან - მრვიწყოებას აქვს ნომერი ნაკლები, ვიდრე სიმბოლოს @-ს - და მიიღება ჯგუფი. ანუ ყველა ჯგუფი მიიღება ASCII-ის ცხრილის მიხედვით (სურვილის შემთხვევაში ამით შესაძლებელია სარგებლობა).

როგორ უნდა ვიბრძოლოთ ამას: მოათავსეთ ტირის სიმბოლო იქ, სადაც ის ნამდვილად არ აღიქმება, როგორც ჯგუფის სიმბოლო, მაგალითად, დასაწყისში ან დასასრულში (ანუ [-ის შემდეგ ან ]-მდე).

ასევე შესაძლებელია ტირის ესკაპირება - მაშინ ის აღნიშნავს თავის თავს მიუხედავად პოზიციისა. მაგალითად, [:-@]-ის ნაცვლად დაწეროთ [:\-@] - და ჯგუფი აღარ იქნება, არამედ იქნება სამი სიმბოლო - მრვიწყოება, ტირე და სიმბოლო @.

მაგალითი

შემდეგ მაგალითში ძიების შაბლონი ასეთია: ციფრი 1, შემდეგ ასო 'a'-დან 'z'-მდე, შემდეგ ციფრი 2:

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

შედეგად ცვლადში ჩაიწერება შემდეგი:

php'! 1-2 ! !'

მაგალითი

ახლა კი ესკაპირება გავაკეთოთ ტირეს. შედეგად ძიების შაბლონი ასეთია: ციფრი 1, შემდეგ ასო 'a', ან ტირე, ან ასო 'z', შემდეგ ციფრი 2:

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

შედეგად ცვლადში ჩაიწერება შემდეგი:

php'! ! 1c2 !'

მაგალითი

შესაძლებელია უბრალოდ გადაადგილება ტირის, მისი ესკაპირების გარეშე:

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

შედეგად ცვლადში ჩაიწერება შემდეგი:

php'! ! 1c2 !'

მაგალითი

შემდეგ მაგალითში ძიების შაბლონი ასეთია: პირველი სიმბოლო - ეს არის პატარა ასოები ან ტირე '-', შემდეგ ორი ასო 'x':

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

შედეგად ცვლადში ჩაიწერება შემდეგი:

php'! Axx ! @xx'

მაგალითი

შემდეგ მაგალითში ძიების შაბლონი ასეთია: პირველი სიმბოლო - ეს არის პატარა, დიდი ასოები ან ტირე '-', შემდეგ ორი ასო 'x':

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

შედეგად ცვლადში ჩაიწერება შემდეგი:

php'! ! ! @xx'

მაგალითი

შესაძლებელია ტირის განთავსება ორ ჯგუფს შორის - იქ ის ნამდვილად არ შექმნის კიდევ ერთ ჯგუფს:

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

შედეგად ცვლადში ჩაიწერება შემდეგი:

php'! ! ! @xx'

პრაქტიკული ამოცანები

Задание 1

მოცემულია სტრიქონი:

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

იპოვეთ ყველა სტრიქონი შემდეგი შაბლონის მიხედვით: ასო 'x', დიდი ან პატარა ასო ან ტირე, ასო 'z'.

Задание 2

მოცემულია სტრიქონი:

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

იპოვეთ ყველა სტრიქონი შემდეგი შაბლონის მიხედვით: ასო 'x', შემდეგ ან დოლარის ნიშანი, ან ტირე ან პლუსი, შემდეგ ასო 'z'.