Maison >développement back-end >tutoriel php >Comment diviser une chaîne en mots tout en préservant les phrases citées ?

Comment diviser une chaîne en mots tout en préservant les phrases citées ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 02:59:17981parcourir

How to Split a String into Words While Preserving Quoted Phrases?

Comment diviser des chaînes par mots, en préservant le texte cité

Pour la chaîne donnée "Lorem ipsum "dolor sit amet" consectetur "adipiscing elit « Dolor », nous cherchons une méthode pour l'éclater en un tableau, en maintenant l'intégrité des phrases citées. L'utilisation du code fourni :

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

entraîne la division de mots individuels. Pour résoudre ce problème, nous exploitons les expressions régulières :

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

Cette expression régulière correspond soit à des chaînes entre guillemets, soit à des caractères autres que des espaces. Les chaînes entre guillemets peuvent contenir des guillemets doubles échappés ("), et la technique s'en charge. Le résultat :

Array
(
    [0] => Array
        (
            [0] => Lorem
            [1] => ipsum
            [2] => "dolor sit amet"
            [3] => consectetur
            [4] => "adipiscing \"elit"
            [5] => dolor
        )

)

Explication :

L'expression régulière peut être décomposée en ses composants :

  • `" # Correspond au caractère guillemet double ("
  • (?: # Démarrer le groupe sans capture 1
  • # Correspond au caractère barre oblique inverse ()
  • # Correspond à n'importe quel caractère à l'exception des sauts de ligne
  • | # OU
  • 1 # Correspond à n'importe quel caractère sauf et "
  • )* # Terminez le groupe 1 sans capture et répétez-le zéro ou plusieurs fois
  • " # Correspond au caractère guillemet double ("
  • | # OU
  • S # Correspond à un ou plusieurs espaces non blancs personnages

    "

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