ტირე ნაკრებების შიგნით PHP-ის რეგულარულ გამოსახულებებში
ტირე - ასევე სპეციალური სიმბოლოა []-ის შიგნით
(გარეთ კი - არა). თუ თქვენ გჭირდებათ თავად
ტირე, როგორც სიმბოლო - მაშინ მოათავსეთ ის იქ,
სადაც ის არ აღიქმება, როგორც ჯგუფის გამყოფი.
რატომ არის ეს მნიშვნელოვანი: თქვენ შეგიძლიათ შექმნათ სიმბოლოთა ჯგუფი,
თავად ამის შეუმჩნევლად. მაგალითად,
აი ასე - [:-@] - თქვენ ფიქრობთ, რომ
ირჩევთ მრვიწყოებას, ტირეს და სიმბოლოს @, როდესაც
სინამდვილეში მიიღება სიმბოლოთა ჯგუფი
:-სა და @-ს შორის. ამ ჯგუფში შედის
შემდეგი სიმბოლოები: :, ;, ?,
<, =, >.
საიდან გაჩნდნენ ისინი? ASCII-ის ცხრილიდან - მრვიწყოებას აქვს ნომერი ნაკლები, ვიდრე სიმბოლოს @-ს - და მიიღება ჯგუფი. ანუ ყველა ჯგუფი მიიღება ASCII-ის ცხრილის მიხედვით (სურვილის შემთხვევაში ამით შესაძლებელია სარგებლობა).
როგორ უნდა ვიბრძოლოთ ამას: მოათავსეთ ტირის სიმბოლო
იქ, სადაც ის ნამდვილად არ აღიქმება, როგორც
ჯგუფის სიმბოლო, მაგალითად, დასაწყისში ან დასასრულში
(ანუ [-ის შემდეგ ან ]-მდე).
ასევე შესაძლებელია ტირის ესკაპირება - მაშინ
ის აღნიშნავს თავის თავს მიუხედავად
პოზიციისა. მაგალითად, [:-@]-ის ნაცვლად დაწეროთ
[:\-@] - და ჯგუფი აღარ იქნება, არამედ
იქნება სამი სიმბოლო - მრვიწყოება, ტირე და სიმბოლო @.
მაგალითი
შემდეგ მაგალითში ძიების შაბლონი ასეთია:
ციფრი 1, შემდეგ ასო 'a'-დან
'z'-მდე, შემდეგ ციფრი 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
შედეგად ცვლადში ჩაიწერება შემდეგი:
'! 1-2 ! !'
მაგალითი
ახლა კი ესკაპირება გავაკეთოთ ტირეს. შედეგად
ძიების შაბლონი ასეთია: ციფრი 1, შემდეგ
ასო 'a', ან ტირე, ან ასო 'z',
შემდეგ ციფრი 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
შედეგად ცვლადში ჩაიწერება შემდეგი:
'! ! 1c2 !'
მაგალითი
შესაძლებელია უბრალოდ გადაადგილება ტირის, მისი ესკაპირების გარეშე:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
შედეგად ცვლადში ჩაიწერება შემდეგი:
'! ! 1c2 !'
მაგალითი
შემდეგ მაგალითში ძიების შაბლონი ასეთია:
პირველი სიმბოლო - ეს არის პატარა ასოები ან
ტირე '-', შემდეგ ორი ასო 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
შედეგად ცვლადში ჩაიწერება შემდეგი:
'! Axx ! @xx'
მაგალითი
შემდეგ მაგალითში ძიების შაბლონი ასეთია:
პირველი სიმბოლო - ეს არის პატარა, დიდი
ასოები ან ტირე '-', შემდეგ ორი ასო
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
შედეგად ცვლადში ჩაიწერება შემდეგი:
'! ! ! @xx'
მაგალითი
შესაძლებელია ტირის განთავსება ორ ჯგუფს შორის - იქ ის ნამდვილად არ შექმნის კიდევ ერთ ჯგუფს:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
შედეგად ცვლადში ჩაიწერება შემდეგი:
'! ! ! @xx'
პრაქტიკული ამოცანები
მოცემულია სტრიქონი:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
იპოვეთ ყველა სტრიქონი შემდეგი შაბლონის მიხედვით:
ასო 'x', დიდი ან პატარა
ასო ან ტირე, ასო 'z'.
მოცემულია სტრიქონი:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
იპოვეთ ყველა სტრიქონი შემდეგი შაბლონის მიხედვით:
ასო 'x', შემდეგ ან დოლარის ნიშანი, ან
ტირე ან პლუსი, შემდეგ ასო 'z'.