Expression régulière simple - Détection de phrase collée

Résolu
wizard512 Messages postés 459 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 11 mai 2013 - 11 mai 2013 à 18:17
wizard512 Messages postés 459 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 11 mai 2013 - 11 mai 2013 à 19:30
Bonsoir à tous,

Voilà, j'ai un soucis assez ennuyeux , je dispose d'un ensemble de donnée structuré dans un fichier XML que je souhaite inséré dans une base de donnée à l'aide de php (dom), jusqu'ici rien de bien compliqué...

Mais j'ai remarqué que dans certains noeuds qui contiennent des paragraphes entiers, des phrases étaient collées..

Par exemple nous avons des : "mot mot mot.Mot mot mot"

Donc pour les décollés j'ai fais passer automatiquement chaque paragraphe par un preg_replace pour les décollés avec cette expression régulière :
/(.*)\.(\w)/i

Or, le fonctionnement de cette expression régulière est assez aléatoire...

Je m'explique, au vu des résultats elle n'a pas l'air de marcher sur les mots avec une ponctuation collée (ex.: "mot mot mot.Mot, mot mot") et aussi sur les mots très cours (ex.: "mot mot mot.Du mot mot mot").

De plus j'aurai bien voulu rajouter aussi d'autres ponctuations de fin de phrase de type "?" "!" ";" et donc n'étant pas très fort dans le domaine des expressions régulière je me demandé si quelqu'un avait une meilleur "expression" à faire passer à mon preg_replace

Cordialement Adam.

1 réponse

wizard512 Messages postés 459 Date d'inscription dimanche 9 janvier 2005 Statut Membre Dernière intervention 11 mai 2013 2
11 mai 2013 à 19:30
$chaine = preg_replace('/([\.,])(\S)/', '$1 $2', $chaine);
$chaine = preg_replace('/(\S)([!?;])(\S)/', '$1 $2 $3', $chaine);
$chaine = preg_replace( '/(\d)\.\s(\d)/' , '$1.$2' , $chaine ) ;

Merci à RadicalDingos
3
Rejoignez-nous