Промяна от 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 могат да се използват съответно за обозначаване на табулатор, връщане на каретка и подаване на ред.