Перехід від ereg до preg
ЗавданняНеобхідно відмовитися від застосування функцій ereg на користь функцій preg.
РішенняСпочатку додамо в шаблон обмежувачі:
Для нечутливого до регістру порівняння за допомогою функції eregi() вкажіть модифікатор /i:
Якщо цілі числа виступають замість рядків як шаблони або заміщаючі значення, перетворіть число в шістнадцяткову форму і вкажіть його за допомогою escape-послідовності:
$hex = dechex($number); preg_match("/\x$hex/", 'string');
ОбговоренняЄ кілька істотних відмінностей між ereg і preg. По-перше, у разі застосування функцій preg шаблон є не просто рядком pattern, а виглядає як /pattern/,1 оскільки в ньому повинні бути вказані роздільники, як у мові Perl.
ereg('pattern', 'string'); перетворюється на: preg_match('/pattern/', 'string');
При виборі розділювачів шаблону не можна розміщувати символи-розділювачі всередині самого шаблону регулярного виразу, інакше ви занадто рано закриєте шаблон.
Якщо обійти цю перешкоду не вдається, будь-яке входження символів-розділювачів у шаблон треба екранувати за допомогою символу зворотної косої риси. Замість того, щоб робити це вручну, викличте функцію addcslashes().
Наприклад, якщо як роздільник виступає символ /:
$ereg_pattern = '.+'; $preg_pattern = addcslashes($ereg_pattern, '/');
Значення змінної $preg_pattern тепер дорівнює.+.
Серед функцій preg немає аналогічного набору функцій, які не чутливі до регістру. Усі вони можуть містити нечутливий до регістру модифікатор. Щоб перейти до іншого набору функцій, замініть:
eregi('pattern','string'); на: 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 для позначення табуляції, повернення каретки та перекладу рядка відповідно.