Пешнигарии регулярҳо дар 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">';
?>
Ҷадвали номҳои сифатҳои (атрибутҳои) ин тегро ба даст оред.