Récemment, j’ai tenté de remplacé des tabulation dans un document, et j’ai été surpris quand ma simple expression régulière,

/\t+/

ne trouvait pas un ensemble de tabulations alors que Sublime Text réalisait facilement l’opération avec la même expression.

Il apparaît en fait que le document a été encodé en UTF-16 et que ceci n’est pas supporté par la fonction PHP preg_*. UTF-16 ajout un octet NULL (\0) après chaque caractère ASCII qui casse l’expression régulière.

Tout ce que vous avez donc à faire pour que ça fonctionne est de convertir votre chaîne de caractères en UTF-8 avant d’exécuter votre expression régulière. :

$string = mb_convert_encoding($raw_string, 'UTF-8', 'UTF-16');
$string = preg_replace('/\t+/', "\t", $string); //Replaces multiple tabs with a single tab

Ceci est notamment valable lors de l’export de certains résultats par PowerShell sous Windows.

Accueil > Linux > Développement > [PHP] PHP preg_match ne fonctionne pas sans aucune raison ? Fustigez UTF-16.