6
votes

Exploser une chaîne une seule fois sur la première sous-chaîne

preg_match () code> donne une correspondance.
Preg_Match_All () CODE> retourne tous les matchs.
Preg_split () Code> retourne tous les scissions.

Comment puis-je diviser uniquement sur la première correspondance? p>

Exemple: p>

array(
  0 => 'first piece',
  1 => 'the rest of the string
        without any further splits'
)


1 commentaires

Si vous faites simplement utiliser \ N pour se diviser dans un tableau, vous pouvez utiliser exploser. C'est légèrement plus rapide que Preg_split.


4 Réponses :


15
votes

Définissez simplement $ limiter à 2 pour 2 parties du tableau. Merci à @benjames de mentionner: xxx

J'ai testé et ça fonctionne bien.

L'argument limite:

Si spécifié, seules les sous-chaînes jusqu'à la limite sont renvoyées avec le reste de la chaîne placée dans la dernière sous-chaîne. Une limite de -1, 0 ou null signifie "Aucune limite" et, comme c'est standard sur PHP, vous pouvez utiliser NULL pour passer au paramètre Flags.


0 commentaires

6
votes

Ajoutez simplement le drapeau de la limite xxx

à partir du manuel

Si spécifié, alors seulement sous-chaînes Limiter sont retournés avec le reste de la chaîne étant placée dans le dernier Substrage.


2 commentaires

Vous ne pouvez pas, parce que ça sous-chaîne.


Mauris: Le sens de votre commentaire n'est pas clair, veuillez expliquer



-1
votes

Je n'ai pas de serveur pour tester cela. Essayez:

preg_split("~\n~",$string,1);


4 commentaires

Il sous-chaînes, vous ne pouvez pas utiliser le drapeau $ limite.


Une limite de 1 ne divisera pas du tout la chaîne.


@Ben: Je pourrais évidemment avoir tort, mais lors de l'application du manuel à Albus 'demandé, et en supposant une limite d'une, elle se lirait comme indiqué: "Si spécifié, seules les soustractions jusqu'à 1 sont renvoyées avec le reste de la chaîne étant placé dans la dernière sous-chaîne. " Pour moi, cela implique que peu importe la limite que vous spécifiez (par exemple, $ limite), il y aura toujours une sous-chaîne résultante avec une valeur de $ limite + 1 qui contient le reste du contenu.


Basé sur la réponse acceptée de RMCLIDED, je réussis la défaite sur celle-ci. Même "RTFM" ne fonctionne pas avec moi, car je comprends mal comprendre :-)



0
votes

Il existe une bonne quantité de nuance à une tâche aussi simple. Différentes techniques peuvent échouer ou offrir des résultats asymétriques dans des scénarios de frange. Il est important de comprendre la qualité de la chaîne d'entrée et de votre sortie souhaitée pour les étuis de franges lors de la décision d'une technique.

La longue histoire courte, j'utiliserais probablement couper () code> pour assainir tout Personnages d'espaces de pointe ou de traînant. J'utiliserais preg_split () code> avec \ r code> dans le motif pour correspondre systématiquement à différentes séquences de nouvelles lignes dans différents environnements. Un quantificateur de + code> (un ou plusieurs) fournira une stabilité supplémentaire au cas où il existe des caractères de nouvelle ligne consécutifs. P>

var_export(
    preg_split('~\R+~', trim($string), 2)
);


0 commentaires