La représentation des caractères Newline varie sur différents systèmes d'exploitation. Il existe principalement les types suivants:
\ n : lignes de ligne (LF) utilisées par Unix / Linux et macOS.
\ r \ n : lignes de ligne (CRLF) utilisées par Windows.
\ r : lignes de ligne (CR) utilisées par Old Mac (Mac OS 9 et versions précédentes).
Lorsque nous traitons du texte multi-lignes sur toutes les plateformes, nous devons souvent traiter uniformément différents types de caractères Newline pour éviter les problèmes lors de la sortie ou un traitement ultérieur.
Supposons que nous ayons un texte multi-lignes avec différentes nouvelles lignes, et nous voulons unifier toutes les nouvelles lines en \ n (style Unix). Cela peut être réalisé à l'aide de preg_filter . Voici un exemple simple:
<span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello, World!\r\nThis is a test.\nAnother line.\rAnd one more line."</span></span><span>;
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\r\n|\r|\n/'</span></span><span>;
</span><span><span class="hljs-variable">$replacement</span></span><span> = </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-variable">$cleaned_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_filter</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$replacement</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">nl2br</span></span><span>(</span><span><span class="hljs-variable">$cleaned_text</span></span><span>);
</span></span>Dans le code ci-dessus, nous définissons une expression régulière / \ r \ n | \ r | \ n / , qui correspondra à toutes les nouvelles lines. Grâce à la fonction preg_filter , nous remplaçons tous les caractères Newline par \ n .
La plus grande différence entre preg_filter et preg_replace est qu'il renvoie NULL lorsque le remplacement régulier échoue, tandis que Preg_replace renvoie la chaîne d'origine. Par conséquent, lorsqu'il s'agit de Newlines, Preg_Filter est particulièrement adapté pour remplacer succinctement NewLines dans le texte et s'assurer qu'aucune modification n'est apportée si aucune nouvelle ligne n'est appariée.
Par exemple, dans le code suivant, nous utilisons Preg_replace pour faire de même:
<span><span><span class="hljs-variable">$cleaned_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$replacement</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span></span>L'effet des deux est le même, mais la valeur de retour de Preg_Filter garantit que ne renvoie que les résultats traités lorsque la correspondance régulière est réussie, sans retourner null , en évitant un jugement supplémentaire et une gestion des erreurs.
Si vous avez plusieurs lignes dans votre texte, le traitement de Newlines peut être plus que simplement les remplacer par \ n . Vous devrez peut-être ajuster le format de votre texte en fonction de certaines conditions, telles que:
Supprime les ruptures de ligne supplémentaires.
Maintenez un certain espace vide.
Normalisez le format des caractères Newline.
Par exemple, le code suivant montre comment supprimer plusieurs nouvelles lignes consécutives dans le texte et conserver une seule nouvelle ligne:
<span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello, World!\n\n\nThis is a test.\n\nAnother line.\n\nAnd one more line."</span></span><span>;
</span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/\n+/'</span></span><span>;
</span><span><span class="hljs-variable">$replacement</span></span><span> = </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-variable">$cleaned_text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_filter</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$replacement</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">nl2br</span></span><span>(</span><span><span class="hljs-variable">$cleaned_text</span></span><span>);
</span></span>Dans cet exemple, le / \ n + / regex correspond à une ou plusieurs nouvelles lignes et les remplace par une nouvelle ligne séparée. De cette façon, nous pouvons effacer les lignes vierges supplémentaires et garder le texte soigné.
Dans PHP, Preg_Filter est une fonction très pratique, en particulier lorsqu'il s'agit de texte multi-lignes et de caractères Newline. En utilisant des expressions régulières rationnellement, vous pouvez facilement effectuer divers traitements du texte, y compris les pauses de ligne de normalisation, la suppression des lignes vides inutiles, le remplacement des caractères spécifiques, etc.
Comprendre comment utiliser correctement la fonction Preg_Filter peut non seulement améliorer l'efficacité de votre code, mais également éviter les problèmes causés par les ruptures de ligne dans différents systèmes d'exploitation. Lorsque vous effectuez un traitement de texte multi-lignes, n'oubliez pas de vérifier si votre caractère Newline répond aux attentes et à le gérer correctement via des expressions régulières pour assurer la cohérence au format texte.