2011-10-07 4 views
0

Je voudrais diviser une setnence en parties le long des virgules, sauf si elle contient une structure paralllel.PHP: fractionner une phrase le long des virgules, sauf pour les structures parallèles

Par exemple, compte tenu de ces phrases (http://owl.english.purdue.edu/owl/resource/623/01/):

Marie aime la randonnée, nager et monter une bicyclette.

Mary aime marcher, nager et faire de la bicyclette.

Je diviser ces le long de la première virgule que si je recevrais:

sentence_array ("Mary likes to hike", "swim, and ride a bicycle") 

Peut-être avec un regex impatient, vérifier au moins 2-3 espaces blancs non entourés par une virgule?

+0

Si vous essayez de ne pas diviser le parallélisme, ne devriez-vous pas le séparer du point de vue technique puisque «faire de la randonnée» fait partie de cette phrase parallèle. – jprofitt

Répondre

2

Peut-être quelque chose comme cela pourrait fonctionner:

<?php 

$str = "Mary likes to hike, to swim, and to ride a bicycle, also, something more at the end."; 
var_dump($str); 

$str = preg_replace('/((\s\w*){3,},)/', '\1*', $str); 
$str = explode('*', $str); 

var_dump($str); 
?> 

Il doit être travaillé sur tho comme utiliser quelque chose de plus unique qu'un simple *

+0

Merci, ça marche. – giorgio79

0

J'ai du mal à comprendre ce que vous voulez réellement? Aurait exploser (',', 'Marie aime marcher, nager et faire de la bicyclette', 2) travailler? d'où le 2 là (limite) Ou est-ce que vous voulez exploser par ','?

+0

Oui, je voudrais diviser par virgule, et sauter la séparation après les virgules si elles sont trop proches, disons dans les 2 mots. – giorgio79

+0

Le thingy 'within 2 words' appelle une expression régulière – PalmTree

0

utilisation explode(separator,string,limit)

ou

split (string $pattern , string $string [, int $limit = -1 ])

+0

Testé, la limite -1 exclut le dernier élément du tableau éclaté, mais je voudrais le garder. En outre, je voudrais seulement diviser par une virgule s'il y a une certaine distance de la virgule précédente, disons 3-4 mots, sinon nous avons une structure parallèle. – giorgio79

+0

alors vous pouvez utiliser juste exploser (séparateur, chaîne) –

+0

pourriez-vous s'il vous plaît me donner un exemple que quelle est votre entrée et que voulez-vous en sortie? –

Questions connexes