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