Shikimi Përpara në Regex të PHP
Ndonjëherë duhet zgjidhur një detyrë të këtij lloji: gjeni
vargun 'aaa' dhe zëvendësojeni atë me '!',
por vetëm nëse pas 'aaa' ndodhet
'x', kurse vetë 'x'
mos e zëvendësoni. Nëse përpiqemi ta zgjidhim detyrën
'drejtpërdrejt', nuk do të dalë:
<?php
preg_replace('#aaax#', '!', 'aaax'); // do të jetë '!', kurse duhet '!x'
?>
Për të zgjidhur detyrën nevojitet një mënyrë për të thënë,
që 'x' nuk duhet të zëvendësohet. Kjo bëhet
me ndihmën e kllapave speciale (?= ),
të cilat thjesht shikojnë, por nuk e marrin me vete.
Këto kllapa quhen shikim pozitiv përpara. Pozitiv - sepse 'x'
(në rastin tonë) duhet të jetë - vetëm atëherë
do të ndodhë zëvendësimi.
Le të përdorim këto kllapa për të zgjidhur detyrën tonë:
<?php
preg_replace('#aaa(?=x)#', '!', 'aaax'); // kthen '!x'
?>
Ekziston edhe shikim negativ përpara
- (?! ) - ai, përkundrazi, thotë se
diçka nuk duhet të jetë. Në shembullin vijues
zëvendësimi do të ndodhë, vetëm nëse pas 'aaa'
nuk ndodhet 'x':
<?php
preg_replace('#aaa(?!x)#', '!', 'aaab'); // kthen '!b'
?>
Jepet një varg që përmban emra funksionesh:
<?php
$str = 'func1() func2() func3()';
?>
Merrni një varg emrash funksionesh nga vargu.
Jepet një varg me një tag:
<?php
$str = '<a href="" class="eee" id="zzz">';
?>
Merrni një varg emrash atributesh të këtij tagu.