⊗ppPmRgVA 258 of 447 menu

Lookahead in PHP Regex

Sometimes you need to solve a problem of this type: find the string 'aaa' and replace it with '!', but only if after 'aaa' there is 'x', and the 'x' itself should not be replaced. If we try to solve the problem 'in a straightforward way', we will not succeed:

<?php preg_replace('#aaax#', '!', 'aaax'); // will be '!', but should be '!x' ?>

To solve the problem, we need a way to say that 'x' should not be replaced. This is done using special brackets (?= ), which only look ahead but do not consume the characters.

These brackets are called positive lookahead forward. Positive - because 'x' (in our case) must be present - only then the replacement will occur.

Let's apply these brackets to solve our task:

<?php preg_replace('#aaa(?=x)#', '!', 'aaax'); // returns '!x' ?>

There is also negative lookahead forward - (?! ) - it, on the contrary, says that something must not be present. In the next example the replacement will occur only if after 'aaa' there is no 'x':

<?php preg_replace('#aaa(?!x)#', '!', 'aaab'); // returns '!b' ?>

Given a string containing function names:

<?php $str = 'func1() func2() func3()'; ?>

Get an array of function names from the string.

Given a string with a tag:

<?php $str = '<a href="" class="eee" id="zzz">'; ?>

Get an array of attribute names of this tag.

byenru