Промяна от ereg на preg

ПроблемНеобходимо е да се изостави използването на ereg функции в полза на preg функции.

РешениеПърво, нека добавим разделители към шаблона:

За сравнение без разлика на главни и малки букви с помощта на функцията eregi(), задайте модификатора /i:

Ако цели числа се използват като заместващи символи или заместители вместо низове, преобразувайте числото в шестнадесетично и го екранирайте:

$hex = dechex($номер); preg_match("/\x$hex/", 'низ');

ДискусияИма няколко съществени разлики между ereg и preg. Първо, когато се използват функциите preg, шаблонът не е просто моделът на низ, но изглежда като /pattern/,1, защото трябва да указва разделители, както в езика Perl.

ereg('модел', 'низ'); става: preg_match('/pattern/', 'string');

Когато избирате разделители на шаблони, не поставяйте разделителни знаци в самия шаблон на регулярен израз, в противен случай ще затворите шаблона твърде рано.

Ако това препятствие не може да бъде преодоляно, тогава всяко появяване на разделителни знаци в шаблона трябва да бъде екранирано с обратна наклонена черта. Вместо да го правите ръчно, извикайте функцията addcslashes().

Например, ако разделителят е /:

$ereg_pattern = '.+'; $preg_pattern = addcslashes($ereg_pattern, '/');

Стойността на променливата $preg_pattern сега е.+ .

Няма подобен набор от функции, които не са чувствителни към главни и малки букви сред функциите на preg. Всички те могат да съдържат модификатор без разлика на главни и малки букви. За да превключите към друг набор от функции, заменете:

eregi('модел','низ'); до: preg_match('/pattern/i', 'string');

Промяната става чрез добавяне на знака i след крайния разделител.Накрая още една, последна, не съвсем очевидна разлика. Ако функцията ereg_replace() използва число (вместо низ) като модел или заместваща стойност, се предполага, че посочвате ASCII кода на знака. Следователно, а също и защото 9 е ASCII представянето на символа табулация (т.е. \t), следният код ще вмъкне знак табулация в началото на всеки ред:

$tab = 9; $replaced = ereg_replace('^', $tab, $string);

И по този начин символите за подаване на ред ще бъдат преобразувани:

$converted = ereg_replace(10, 12, $text);

За да се предотврати това поведение на функцията, записът във функциите на ereg трябва да бъде така:

От друга страна, функцията preg_replace() третира числото 9 като число 9, а не като замяна на раздела.

За да преобразувате кодове на символи за използване във функцията preg_replace(), преобразувайте ги в шестнадесетични и ги предварете с \x.

Например 9 става \x9 или \x09, а 12 става \x0c. Алтернативно, \t, \r и \n могат да се използват съответно за обозначаване на табулатор, връщане на каретка и подаване на ред.