selection texte entre 2 balises

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 : selection texte entre 2 balises

par sadeq » 08 juin 2006, 15:32

content pour toi, mais je te conseille de regarder du côté des expressions réguliaires car il y a des commutateurs à ajouter après le critère de sélection pour résoudre quelsque cas particuliers liés à la casse et au retour-chariot par exemple. :boire9:

par Invité » 07 juin 2006, 22:26

Et là c'est parfait ! :lol:

Merci sadeq de ton aide :wink:

par sadeq » 07 juin 2006, 12:54

Oui cher ami,
J'ai oublié que tu voulais extraire la chaine des clés. Pour cela t'as simplement besoin d'ajouter une paire de parenthèse pour sélectionner cette chaine dans l'expression régulaire.
Cette sélection supplémentaire retourne une case [1] dans le résultat que tu dois utiliser pour construire tes scripts JS :

Corrigé:
<?php 
//Le texte de base 
$ancien_body = ' 
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}} 
'; 
//Toutes les balises {{indexerpage ...}} 
preg_match_all('#\{\{indexerpage clef="([^{]*)"\}\}#', $ancien_body, $maux_all); 

//Affichage des réslutats pour le débug seulement
echo "<pre>"; 
print_r($maux_all); 
echo "</pre>"; 

//Constructions des scripts js pour tous les résultats trouvés dans $maux_all[1]
if($maux_all[1]){ 
 foreach ($maux_all[1] as $mot)
    echo '<script language="JavaScript">findInPage(\''.$mot.'\'); document.getElementById(\'baudit\').focus();</script>'; 
}
?>

par popi » 06 juin 2006, 22:17

Merci sadeq, ta proposition sélectionne bien la première des actions mais l'action toute entière et non pas seulement les mots-clés qui se trouvent entre les guillemets clé1; clé2 :?:

edit: je m'en sors en faisant comme çà :
preg_match('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux); 
$izol = eregi('\{\{indexerpage clef="(.*)"\}\}', $maux[0], $maux); 

if($maux[1]){
	$recherche_js='<script language="JavaScript">findInPage(\''.$maux[1].'\'); document.getElementById(\'baudit\').focus();</script>';
}else{
	$recherche_js="";
}
çà n'as pas l'air "catholique" mais çà fonctionne :wink:

par sadeq » 05 juin 2006, 11:48

Effectivement, puisque tu sélectionnes tous les caractères (.*) entre le mote (clef=") et ("}}) il se trouve que ces caractères englobent aussi des balises entières si plusieurs existent avant d'arriver au dernier mot "}}"
Comme dans le texte suivant :
$ancien_body = ' 
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}} 
';
C'est pourquoi il faut arrêter la sélection d'une balise juste après la limite ("}}) en disant :
sélectionner tout caractère entre {{indexerpage clef=" et "}} sauf les{ qui marquent normalement le début d'une autre balise.
Ce qui s'écrit : [^{]*
Remarque: les caractères spéciaux se trouvant entre crochets [] ne sont pas échappés

Voici une proposition, pour trouver donc toutes les balises {{indexerpage clef="..."}} :
<?php
//Le texte de base
$ancien_body = '
{{indexerpage clef="clé1; clé2"}}{{indexerpage clef="clé3; clé4"}}{{indexerpage clef="clé5; clé6"}}
';
//La première balise {{indexerpage ...}} rencontrée
preg_match('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux); 
//Toutes les balises {{indexerpage ...}}
preg_match_all('#\{\{indexerpage clef="[^{]*"\}\}#', $ancien_body, $maux_all); 

//Affichage des réslutats
echo "<pre>";
print_r($maux);
print_r($maux_all);
echo "</pre>";
?>

par popi » 05 juin 2006, 10:53

Bonjour à vous,
je reviens sur mes maux :)
$izol = eregi('\{\{indexerpage clef="(.*)"\}\}', $ancien_body, $maux); 

if($maux[1]){
	$recherche_js='<script language="JavaScript">findInPage(\''.$maux[1].'\'); document.getElementById(\'baudit\').focus();</script>';
}else{
	$recherche_js="";
}

je bricole un wiki sur lequel les actions sont quotées avec des accolades et jusqu'à présent mon code fonctionnait, il recherche ce qui se trouve entre et le sélectionne sauf que je n'avais pas prévu que plusieurs actions peuvent cohabiter et du coup je ne sais pas comment lui dire tu t'arrêtes aux premières accolades de fermeture après le mot indexerpage ?

En les comptant ?
En attendant je retourne sur le tuto des expressions...
Merci de votre aide

par Cyrano » 21 mai 2006, 21:10

Je crois que je vais passer un peu plus de temps sur les tutoriaux que sur les forums... :)
Les deux sont complémentaires : on commence avec les tutos et quand un point paraît obscur, on passe par les forums pour obtenir des éclaircissements :)

Bon dev.

par popi » 21 mai 2006, 21:08

Yes !! :D
en fouinant sur les tutos d'expressions j'ai trouvé çà :
$izol = eregi("{{indexerpage clef=\"(.*)\"}}", $page, $maux); 
echo '<p>Mots à sélectionner : '. $maux[1] . '</p>';
Je n'ai plus qu'à transmettre $maux[1] à javascript et çà le fait :wink:

Je crois que je vais passer un peu plus de temps sur les tutoriaux que sur les forums... :)

Encore merci

par Cyrano » 21 mai 2006, 20:05

Que ce soit en JavaScript ou en PHP, les expressions régulières sont difficiles à aborder, mais il faut bien commencer quelque part. Tout ce que tu as à faire, c'est te jeter à l'eau et demander un coup de pouce quand tu as une difficulté.

Si tu ne commences pas, tu n'apprendras jamais ;)

C'était la minute de logique imparable de Cyrano:langue:

par popi » 21 mai 2006, 19:15

Merci Cyrano, je suis allé voir mais c'est encore trop hard pour moi :(

par Cyrano » 21 mai 2006, 14:18

En JavaScript, tu devrais t'intéresser de très près aux expressions régulières pour réaliser ça.

selection texte entre 2 balises

par popi » 21 mai 2006, 14:09

Bonjour à vous,
j'ai dans un texte la chaine suivante :

Code : Tout sélectionner

{{indexerpage clef="et ici mes clés"}}
je voudrais sélectionner

Code : Tout sélectionner

et ici mes clés
sans le connaitre à l'avance, j'arrive à sélectionner {{indexerpage clef= mais pas uniquement ce qu'il y a entre les guillemets ?
l'intérêt étant de remplacer directement à la main les maux-clés

Merci de votre aide