წინა ნახვა PHP რეგულარულ გამონათქვამებში
ზოგჯერ საჭიროა ამ类型的 ამოცანის ამოხსნა: მოძებნოთ
სტრიქონი 'aaa' და შეცვალოთ იგი '!'-ით,
მაგრამ მხოლოდ იმ შემთხვევაში, თუ 'aaa'-ის შემდეგ
დგას 'x', თავად 'x' კი არ შეიცვალოს.
თუ ამოცანის ამოხსნას 'პირდაპირ' ვეცდებით, ვერაფერს გავაკეთებთ:
<?php
preg_replace('#aaax#', '!', 'aaax'); // იქნება '!', უნდა იყოს '!x'
?>
ამოცანის ამოსახსნელად საჭიროა გზა, რომ ვთქვათ,
რომ 'x' არ უნდა შეიცვალოს. ეს კეთდება
სპეციალური ფრჩხილების (?= ) მეშვეობით,
რომლებიც მხოლოდ ათვალიერებენ, მაგრამ არ იღებენ თან.
ამ ფრჩხილებს ეწოდება პოზიტიური წინა ნახვა.
პოზიტიური - რადგან 'x'
(ჩვენს შემთხვევაში) უნდა იყოს - მხოლოდ მაშინ
მოხდება ჩანაცვლება.
მოდით გამოვიყენოთ ეს ფრჩხილები ჩვენი ამოცანის გადასაჭრელად:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // დააბრუნებს '!x'
?>
არსებობს ნეგატიური წინა ნახვაც
- (?! ) - ის, პირიქით, ამბობს, რომ
რაღაც არ უნდა იყოს. შემდეგ მაგალითში
ჩანაცვლება მოხდება მხოლოდ იმ შემთხვევაში, თუ 'aaa'-ის
შემდეგ არ დგას 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // დააბრუნებს '!b'
?>
მოცემულია სტრიქონი, რომელიც შეიცავს ფუნქციების სახელებს:
<?php
$str = 'func1() func2() func3()';
?>
მიიღეთ ფუნქციების სახელების მასივი სტრიქონიდან.
მოცემულია სტრიქონი თეგით:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
მიიღეთ ამ თეგის ატრიბუტების სახელების მასივი.