Предвиђање напред у регуларним изразима 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">';
?>
Добијте низ имена атрибута овог тага.