Maison >développement back-end >tutoriel php >Comment conserver le texte cité sous forme de mots uniques lors de l'utilisation de l'explose() de PHP ?

Comment conserver le texte cité sous forme de mots uniques lors de l'utilisation de l'explose() de PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-07 13:01:12481parcourir

How to Preserve Quoted Text as Single Words When Using PHP's explode()?

Traiter les mots cités comme des mots simples en PHP éclater

Comment pouvons-nous décomposer une chaîne, comme vu ci-dessous, en utilisant éclater() pendant conserver le texte cité sous forme de mots simples ?

Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor

Attendu Résultat :

["Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor"]

Malgré les tentatives utilisant le code suivant, l'implémentation actuelle segmente chaque mot de la chaîne :

$mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
$noquotes = str_replace("%22", "", $mytext");
$newarray = explode(" ", $noquotes);

Solution :

Pour capturer avec précision les mots cités en tant qu'entités uniques, nous pouvons tirer parti preg_match_all() :

$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \"elit" dolor';
preg_match_all('/"(?:\\.|[^\\"])*"|\S+/', $text, $matches);
print_r($matches);

Cette syntaxe raffinée gère même les guillemets échappés dans les phrases entre guillemets.

Répartition de Regex :

"(?:         # Start non-capture group 1
  \        #   Match backslash character
  .         #   Match any character except line breaks
  |         #   Or
  [^\"]    #   Match any character except backslash and double quotes
)*          # End non-capture group 1 and repeat it zero or more times
"           # Match double quotes
|           # Or
\S+         # Match one or more non-whitespace characters

Gestion de " Au lieu des guillemets doubles :

En cas de besoin surgissez pour traiter " à la place des guillemets doubles, utilisez cette expression régulière ajustée :

preg_match_all('/%22(?:\\.|(?!%22).)*%22|\S+/', $text, $matches);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn