recherche dans un type text d'une base de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recherche dans un type text d'une base de données

par sadeq » 27 juin 2007, 16:27

Il suffit de mettre aussi les + dans les () dans l'expression régulière, car le + ou * représentent les occurences possibles du caractère recherché.
Exemple:
<?php
$texte = "1° phrase!! 2° phrase?? 3° phrase..."; 
$phrases = preg_split("/(\?+)|(!+)|(\.+)/", $texte,-1, PREG_SPLIT_NO_EMPTY+PREG_SPLIT_DELIM_CAPTURE); 

//afficher 
print_r($phrases);
?>

par bartz » 27 juin 2007, 16:02

Alors, j'ai testé, cela fonctionne assez bien, sauf que si jamais j'ai toto???titi.tutu cela me renvoie toto? titi.tutu

par bartz » 27 juin 2007, 15:52

Ok,

je vais tester cela de suite.

Merci beaucoup.

par sadeq » 27 juin 2007, 15:09

Hé oui, c'est dù au fait que dans la fonction simplifie() tu concaténe toujours avec les points.
La difficulté réside dans le fait que tu ne sait pas pour une phrase X quel délimiteur a été rencontré pour couper 2 phrases.

La solution est d'utiliser preg_split() avec le flag : PREG_SPLIT_DELIM_CAPTURE (version >= PHP 4.0.5)
tout en entourant les délimiteurs recherchés entre () comme ça cette fonction retourne à la fois les phrases découpées et les démimiteurs rencontrés.

Exemple:
<?php
$texte = "1° phrase! 2° phrase? 3° phrase."; 
$phrases = preg_split("/(\?)+|(!)+|(\.)+/", $texte,-1, PREG_SPLIT_NO_EMPTY+PREG_SPLIT_DELIM_CAPTURE); 

//afficher 
print_r($phrases);
?>
Mais fait attention au nouveau compte des phrases. :wink:

par bartz » 27 juin 2007, 14:34

Salut,

Alors voila ma fonction mais j'ai un souci:
function simplifie($texte){

$phrase=split("\?+|!+|\.+",$texte);

$lg= count($phrase);//longueur du tableau crée

if($lg >0){
	if($lg>3){
		return $phrase[0].". ".$phrase[1].". ".$phrase[2];
	}
	else{
		return $phrase[0].".";
	}
}
}
$text=simplifie("dfegfbre?    babar? lriguhre... titi........................... dfguih!!!!!!!!!!!! rere gt . iughrer! ggy. ig???? regiz.. regjkvbg? reo. iou fhrft ret rebgr. eigfurhefoir gfiarogf. egi regyg ro_gfrereyg. reghreot grtoreg. rfg reoreg zeoy_g.");
echo $text;
en fait si je teste avec ceci;
simplifie("tot.titi.tutu?figh ? fg zeruye????? fhgb erg ..... lrig zrey "), ca me renvoie bien tot.titi.tutu
mais si je teste avec

simplifie(tot?titi.tutu.fgjkfg?dfghf gd???fdgigh ") ca me renvoie tot.titi.tutu

je ne sais pas comment faire pour que cela me renvoie bien tot?titi.tutu

Merci

par bartz » 27 juin 2007, 13:38

Ok,

Merci pour les infos...


A plus

par Ryle » 27 juin 2007, 13:32

Il n'y a pas de fonction toute prête pour cela. Tu peux effectivement jouer sur la ponctuation en recherchant les points (à voir également les points d'exclamation ou d'interrogation) en utilisant substr() pour tronquer la chaine, et strpos() pour déterminer la position d'un caractère dans la chaine.
Tu peux ainsi savoir ou couper pour obtenir ta première phrase et éventuellement recommencer l'opération sur l'autre partie de la chaine pour avoir les suivantes :)

par sadeq » 27 juin 2007, 13:32

Bonne idée tu te référe aux points pour délimter tes phrases. Le plus simple est de couper ton texte en parties séparées par des points en les rangeant dans un tableau.
En suite tu compte les lignes du tableau pour appliquer tes règles.

La fonction PHP qui coupe un texte en partie séparées par un caractère connu est explode()
Exemple:
$texte = "1° phrase. 2° phrase. 3° phrase.";
$phrases = explode(".", $texte); //retourne un tableau de phrases issues du découpage de $texte au niveau des points

//afficher
print_r($phrases);
Je te laisse la suite.

recherche dans un type text d'une base de données

par bartz » 27 juin 2007, 13:15

Salut,

Je souhaite afficher le contenu d'un champs d'une table qui est du type text.
Cependant, je voudrais afficher seulement les 3 premieres phrases s'il en existe plus. Si le text en comporte moins, je voudrais afficher juste la 1ere phrase...

Quel fonction php me permet de faire ceci.

Merci

Ps: J'avais pour idée de rechercher le 3eme point ou le 1er. Mais je ne sais pas comment faire.