Page 1 sur 1
Transformer un texte en texte versets
Posté : 11 sept. 2009, 14:02
par alec@PHP
Bonjour,
Cela fait un certain temps que je cherche comment faire, mais je ne trouve pas la solution :
Je voudrais dans un texte insérer un numéro avant chaque phrase (un peu comme dans la Bible les versets).
Par exemple :
[1] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. [2] Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. [3] Cras elementum ultrices diam. [4] Maecenas ligula massa, varius a, semper congue, euismod non, mi. [5] Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. [6] Duis semper. [7] Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. [8] Pellentesque congue...
En fait mon texte est plus compliqué que cela mais si j'ai le principe je pense pouvoir adapter.
Merci pour toute aide, si qqun a une idée.
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 14:07
par Dr@ke
Surement par exemple avec la fonction explode() avec les: .
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 14:08
par thehawk
Un code sans que j'ai tester etc ... c'est une base de départ
<?php
$texte = 'Une Phrase . Deuixi .';
$temps = explode('.' , $texte);
$temps_c = count($temps)-1; // Car ta derniere phrase fini par un point ^^
$r = array();
for($i = 0 ; $i <= $temps_c ; $i++)
{
$r[] = '['.$i.'] '.$temps[$i];
}
echo implode('.' $r);
?>
Bye HAwk
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 14:45
par alec@PHP
Merci beaucoup.
Mon texte contiendra aussi des phrases terminant par ... ! ? ' " ou un retour chariot, mais j'ai l'impression qu'on ne peut pas explode() sur plusieurs caractères différents en une seule fois ?
Par exemple si j'avais ce texte :
[1] Lorem ipsum dolor sit amet, consectetuer adipiscing elit ? [2] Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor ! [3] Cras elementum ultrices diam !
[4] Maecenas ligula massa, varius a, semper congue, euismod non, mi. [5] Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat...
[6] Duis semper. [7] Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim ! [8] Pellentesque congue...
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 14:57
par Calimero
Mon texte contiendra aussi des phrases terminant par ... ! ? ' " ou un retour chariot, mais j'ai l'impression qu'on ne peut pas explode() sur plusieurs caractères différents en une seule fois ?
C'est là que
preg_split() entre en jeu, quand explode() montre ses limites

Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 15:23
par alec@PHP
Ok merci je vais essayer de me dépatouiller avec preg_split().
Merci à tous,
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 17:54
par alec@PHP
En fait quand j'utilise preg_split comme ca :
define("MASK", "/[.|?|!|\n]/");
$d = preg_split(MASK,"Ceci est une phrase. Ceci est une question ? Ceci est une exclamation ! Ceci est un retour :
du chariot.");
Ca me donne :
Array
(
[0] => Ceci est une phrase
[1] => Ceci est une question
[2] => Ceci est une exclamation
[3] => Ceci est un retour :
[4] => du chariot
[5] =>
)
Ce qui est pas mal, mais si je veux reconstituer mon texte comment le script peut savoir quel ponctuation il lui faut ?
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 18:43
par Calimero
Tu peux y arriver avec l'option PREG_SPLIT_DELIM_CAPTURE et l'utilisation de parenthèses autour de ton masque :
define("MASK", "/([.|?|!|\n])/");
$d = preg_split(MASK,"Ceci est une phrase. Ceci est une question ? Ceci est une exclamation ! Ceci est un retour :
du chariot.",null,PREG_SPLIT_DELIM_CAPTURE);
print_r($d);
Code : Tout sélectionner
Array
(
[0] => Ceci est une phrase
[1] => .
[2] => Ceci est une question
[3] => ?
[4] => Ceci est une exclamation
[5] => !
[6] => Ceci est un retour :
[7] =>
[8] => du chariot
[9] => .
[10] =>
)
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 18:52
par alec@PHP
Génial !! Merci infiniment !!
Re: Transformer un texte en texte versets
Posté : 11 sept. 2009, 22:26
par alec@PHP
Encore moi ^^
Comment peut-on preg_spliter sur deux délimiteurs dont l'un est compris dans l'autre ?
Je m'explique je dois séparer les 3 phrases suivantes :
Ceci est une phrase avec un point final. Et ceci et une phrase avec une 'citation façon anglaise.' Ceci est une phrase avec un autre point final.
Je cherche donc à splitter sur . et .'
J'ai essayé pleins de trucs mais rien n'y fait.
Une idée ? svp
Re: Transformer un texte en texte versets
Posté : 14 sept. 2009, 12:37
par Calimero
Il va falloir te mettre sérieusement aux expressions régulières
<?php
header('Content-Type: text/plain');
define("MASK", "/([.|?|!|\n]+[']*)/");
$d = preg_split(MASK,"Ceci est une phrase. Ceci est une question ? Ceci est une exclamation ! Ceci est un retour :
du chariot. Ceci est une phrase avec un point final. Et ceci et une phrase avec une 'citation façon anglaise.' Ceci est une phrase avec un autre point final.
",null,PREG_SPLIT_DELIM_CAPTURE);