Je travaille sur une grande application PHP (> 1 million de lignes, 10 ans) qui fait une utilisation intensive de Je suis très conscient Pourquoi Est-ce que quelqu'un sait combien de temps ereg code> et ereg_replace code> - actuellement 1 768 expressions régulières uniques en 516 classes. p>
EREG CODE> est obsolète mais migrant clairement vers PREG CODE> pourrait être très impliqué. p>
ereg code> est susceptible d'être maintenu dans PHP, et / ou avoir des conseils pour migrer vers PREG CODE> sur cette échelle. Je soupçonne une traduction automatisée d'Ereg to freg est impossible / impraticable? P>
4 Réponses :
Tous les fonctions EREG code> seront supprimées à partir de PHP 6, je crois. P>
Je ne suis pas sûr quand Concern ce deuxième problème (traduire Je parie la plupart des Les 1768 regexes peuvent être portées à l'aide d'une macro, et les autres, bien, une bonne paire d'yeux. p> Une autre option peut être d'écrire des emballages autour des fonctions ereg code> sera supprimé mais mon pari est à partir de PHP 6.0. ereg code> sur sur vers PREG CODE>) Ne semble pas quelque chose qui est difficile, si votre demande a> 1 million de lignes, vous devez sûrement avoir les ressources nécessaires pour que quelqu'un effectue ce travail pendant au plus une semaine. Je goyai tous les ereg _ code> dans votre code et configurez des macros dans votre IDE préféré (des trucs simples comme Ajout de délimiteurs, modificateurs, etc.). P> ereg code> si elles sont Non disponible, implémentant Les modifications au besoin: P> if (function_exists('ereg') !== true)
{
function ereg($pattern, $string, &$regs)
{
return preg_match('~' . addcslashes($pattern, '~') . '~', $string, $regs);
}
}
if (function_exists('eregi') !== true)
{
function eregi($pattern, $string, &$regs)
{
return preg_match('~' . addcslashes($pattern, '~') . '~i', $string, $regs);
}
}
Plus évasif serait d'utiliser "\ 1" code> comme délimiteurs. Pourrait encore échouer, mais les autres délimiteurs typiques peuvent déjà être utilisés et préfixés sans inutilement avec les barres backslashes
+1 - Superbe réponse, merci (c'était ma première question Stackoverflow, et je suis déjà impressionné!)
@Mario: est \ 1 code> un délimiteur PCRE valide? Je ne savais pas ça! =) S'ils sont déjà échappés dans le contexte de ereg code>, échapper à nouveau aux tildes ne devraient pas avoir de mauvaises conséquences ... ou doit-il être addcslashes ($ motif, '\\ ~') code>? Je suis vraiment mauvais quand il s'agit de s'échapper (ONU) des données échappées, il faut toujours tester ça d'innombrables fois!
@Oliver: Merci, j'espère que vous vous tenez! ;)
J'ai eu ce problème sur une échelle beaucoup plus petite - une application plus comme 10 000 lignes. Dans tous les cas, tout ce que je dois faire était de passer à Quiconque devrait être capable de le faire - même un non programmeur peut recevoir une liste de noms de fichiers et de numéros de ligne. P>
Exécutez simplement vos tests pour surveiller les échecs pouvant être corrigés. P>
Les fonctions EREG seront supprimées de PHP6, par la manière - http://jero.net/articles/php6 < / a>. p> Preg_replace () Code> et mettez des délimiteurs autour du motif de regex. P>
Mon intuition dit qu'ils ne vont jamais supprimer Dans tous les cas, il convient de noter que: p>
Vous n'êtes pas obligé de mettre à niveau votre installation PHP. Il est assez courant de conserver des serveurs obsolètes pour exécuter des applications Legady. P> Li>
the PHP_Compat PAIR offre une version PHP uni de certaines fonctions natales. Si BTW ... En fait, PHP 6 est mort . Ils ont compris que leur approche de rendre PHP entièrement conforme à unicode était plus difficile que ce qu'ils ne le pensaient et qu'ils repensent tout. La conclusion est la suivante: vous ne pouvez jamais faire de prédictions parfaites. P> ereg code> exprès. PHP soutient toujours des trucs vraiment anciens et obsolètes comme le registre des globaux. Il y a simplement trop d'applications obsolètes. Il y a cependant une petite chance que l'extension soit enlevée parce que quelqu'un trouve une vulnérabilité sérieuse et il n'y a que personne pour le réparer. P>
ereg code> disparaît, il est possible qu'il soit ajouté. P> li>
ol>
Merci - votre dernier lien était particulièrement intéressant. Nous faisons une utilisation intensive d'analyses multibyte / unicode et avons une tonne de classes utilitaires à la maison pour le soutenir. La promesse de soutien native dans PHP6 était extraite mais terrifiante pour nous!
EREG CODE> a été découragé depuis autour de PHP 4.1 - mais uniquement parce qu'il n'est pas aussi optimisé que les fonctions PCRE. Il n'est pas trop susceptible d'être supprimé de façon bientôt (pas avec le mythique PHP6 de toute façon), et même il serait simple d'écrire un wrapper de support de compatibilité d'exécution (que vous devriez faire pour tester). Vous devez énumérer quelques exemples pourquoi vous pensez que vos expressions étendues POSIX seraient incompatibles. Les différences sont rarement significatives.Il existe des outils qui peuvent traduire de
ereg code> àprg code>; Regexbuddy par exemple et prend en charge COM Automation. En fonction de la complexité de vos regexes, et si vous avez besoin de migrer, cela pourrait être une option pertinente.