8
votes

Une fonction exploser () qui ignore les caractères à l'intérieur des citations?

Est-ce que quelqu'un connaît une fonction rapide et facile d'exploser () comme fonction similaire pouvant ignorer les caractères de séparateur qui sont enfermés dans une paire de caractères arbitraires (par exemple, citations)?

Exemple: xxx

devrait entraîner une matrice avec les membres suivants: xxx

Le fait que les caractères sont enveloppés dans des guillemets simples les éparpre de être des séparateurs.

points bonus pour une solution pouvant traiter des caractères wrapper xxx

une solution PHP natif serait préféré, mais je ne pense pas qu'une telle chose existe!


3 Réponses :


8
votes

str_getcsv ( $ str, '/')

Il y a une recette pour <5,3 sur la page liée.


5 commentaires

Alors passez ensuite un caractère différent sous forme d'enceinte.


ne compte pas. Il renvoie array ([0] => ceci est [1] => une chaîne [2] => Ça devrait être [3] => éclaté. [4] => [5] => mais " 6] => ici ', [7] => et' non [8] => ici ')


Sent comme un bug PHP pour moi alors.


STR_GETCSV n'accuse que d'un caractère de boîtier qui se produit au début d'une section fractionnée (c'est-à-dire au début d'une chaîne ou juste après un délimiteur). Pas un bug (il gère correctement CSV), mais pas bon pour cette question.


str_getcsv ($ str, '/', "'"); 3rd Param est le boîtier.



0
votes

Quelque chose de très proche avec preg_split: http: // fr2 .php.net / manuel / fr / fonction.preg-split.php # 92632

Il gère plusieurs caractères d'emballage et plusieurs caractères de délimitation.


1 commentaires

Bravo @ Greg0ire, cela a l'air bien mais a toujours besoin d'un peu de travail. Je vais essayer de le changer à mes besoins avec ma faible connaissance des regextes.



5
votes

Ceci est presque impossible avec Preg_split , car vous ne pouvez pas dire au milieu de la chaîne si vous êtes entre guillemets ou non. Cependant, preg_match_all peut faire le travail.

solution simple pour un seul type de citation: xxx

cette fonction aura toutes sortes de problèmes Si vous transmettez certains caractères spéciaux (\ ^ -], selon http: //www.regular- expressions.info/reference.html ), vous devez donc échapper à celles-ci. Voici une solution générale qui échappe aux caractères spéciaux de regex et peut suivre plusieurs types de guillemets séparément: xxx

(Notez que je garde toutes les variables entre crochets pour minimiser les besoins de l'évanouissement - En dehors des crochets, il y a environ deux fois plus de caractères spéciaux.)

Si vous vouliez utiliser] comme citation, vous avez probablement voulu utiliser [comme la citation correspondante, mais je vais partir Ajout de cette fonctionnalité comme un exercice pour le lecteur. :)


2 commentaires

ESSION: Si les citations ne sont pas équilibrées, cette fonction vous jettera assez pour les faire équilibrer.


Je viens de découvrir que la fonction preg_quote est probablement une meilleure façon d'échapper aux caractères dans des expressions régulières.