Foi definido em versões anteriores do PHP a indicação do padrão de expressão regular (REGEX ou REGEXP) baseado em funções ereg como deprecated.
Esta pequena dica é na tentativa de apresentar as principais diferenças entre os padrões de expressão regular das funções ereg para a preg e ajudar vários times nesta conversão.
Ereg é baseado no padrão POSIX, enquanto preg é baseado no padrão Perl e compatíveis. O padrão ereg será retirado totalmente do PHP e será mantido apenas o padrão preg.
Os 4 principais pontos para compatibilizar a maioria dos casos de uso e portar o padrão ereg para preg são:
- Adicionar um delimitador ao padrão, como por exemplo ‘/’: De ‘padrao_regex’ para ‘/padrao_regex/’;
- Escapar o delimitador, caso o mesmo faça parte do padrão, como por exemplo “padr/ao”, que deveria tornar-se “/padr\/ao/”;
- Caso a função ereg utilizada seja padrão case-insensitive, como por exemplo a eregi, basta adicionar ‘i’ no final do padrão regex da função preg, como em, ereg(“padrao”) por preg_match(“/padrao/i”);
- Valores ASCII: No ereg, se for utilizar um número no padrão, o mesmo é entendido como um valor ASCII correpondente. Mas no padrão preg, números não são tratados como valores ASCII. Portanto, se um padrão preg contiver um valor como 9, vindo do ereg, é necessário alterá-lo, visto que no ereg 9 é o correspondente ASCII de tab e no preg é o próprio 9. Para converter basta \x9, que é utilizando o hexadecimal correspondente ou apenas \t no caso do tab.