Прагляд наперад у рэгулярках 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">';
?>
Атрымайце масіў імёнаў атрыбутаў гэтага тэга.