[Code] Remplacer des || (double pipe) successifs

Ayant eu le problème récemment, je vous livre ce petit truc :

Expression régulière pour remplacer des || (séparés ou pas par des espaces) :

/(\|\|)(\s*\|\|)+/

La commande PHP résultante est :

$texte_sortant = preg_replace('/(\|\|)(\s*\|\|)+/', '||', $texte_entrant);

Petite explication rapide :

  • \|\| pour les deux barres verticales (on échappe les caractères spéciaux via \)
  • \s* pour « 0 ou plusieurs caractères d’espacement »
  • le * à la fin permet d’indiquer qu’on recherchera entre 0 et n fois la chaîne (\s*\|\|)

Il s’agissait à l’origine de code HTML épuré via strip_tags et avec des retours à la ligne remplacés par des || : donc on se retrouvait rapidement avec des trucs du style || || || || 🙂