IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

S'arrêter à la première occurence d'un caractère [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Par défaut S'arrêter à la première occurence d'un caractère
    Bonjour à tous,

    Ayant un petit soucis, je me tourne vers vos lanternes pour m'aider à le résoudre !

    La situation est la suivante : j'ai une chaine de caractère dans laquelle je souhaite extraire des informations. La chaine est toujours sous la forme suivante

    type="block" name="Bloc central"
    Ce que je souhaite, c'est pouvoir récupérer les informations qui sont "type" et "name". Jusque là je pensais que tout allait passer comme une lettre à la poste sauf que... Non !

    Je récupère correctement "name" mais ce n'est hélas pas le cas pour le "type".

    Un exemple valant mieux qu'un long discours, je vous colle la partie du code qui me permet de "tenter" cette récupération et ce qui m'est affiché à l'ecran.

    CODE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    foreach($array_block[1] as $values_block) {
    		$name_block = get_parsed_value('/name="(.*)"/', $values_block);
    		$type_block = get_parsed_value('/type="(.*)"/', $values_block);
    		echo 'STRING TO PARSE : ' . $values_block . '<br />BLOCK ' . $name_block . ' TYPE ' . $type_block . '<br /><br />';
    	}
     
    function get_parsed_value($pattern, $page)
    {
    	$regs = '';
    	preg_match($pattern, $page, $regs);
    	if(!empty($regs[1]))
    		return $regs[1];
    	else
    		return;
    }
    AFFICHAGE :
    STRING TO PARSE : type="block" name="Bloc central"
    BLOCK Bloc central TYPE block" name="Bloc central
    Je récupère donc bien le nom mais le type me renvoie tout ce qui se trouve jusqu'à la dernière double quote !

    CHAINE A PARSER :
    type="block" name="Bloc central"
    RENVOIE CE QUI EST EN ROUGE:
    type="block" name="Bloc central"
    ALORS QUE JE SOUHAITE CE QUI EST EN VERT:
    type="block" name="Bloc central"
    Comment puis-je "forcer" l'arrêt à la première double quote rencontrée ? Car ici il renvoie tout ce qui se trouve entre type" et la dernière ".

    Merci d'avance pour votre !

  2. #2
    Membre averti
    Inscrit en
    Février 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 49
    Par défaut
    Je me répond à moi-même si ça peut en aider certains. Il suffisait de rajouter U à mon regex qui lui indique de ne pas parcourir le reste de ma chaine dès qu'il a trouvé la première occurence !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $type_block = get_parsed_value('/type="(.*)"/', $values_block);

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,

    Il est où le U ?





    Tu te compliques la vie.
    Si je ne me trompe pas dans la syntaxe de PHP que je ne connais pas bien, ceci devrait simplifier ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($array_block[1] as $values_block) {
                    preg_match('/type="(.*)".+name="(.*)"/U',$values_block,$regs);
                    if(!empty($regs[1]))
                            echo 'STRING TO PARSE : ' . $values_block . '<br />BLOCK '. $regs[1] . ' TYPE ' . $regs[2] . '<br /><br />';
                    else
                            return;
    )
    Si c'est incorrect, donnes moi la bonne rédaction, stp.
    Je crois qu'on peut même mettre $1 et $2 à la place de $regs[1] et $regs[2]
    Mais l'emploi de preg_match(), ça je pense que c'est bon.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/08/2011, 15h37
  2. S'arrêter à la première occurence dans un regex
    Par Anduriel dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/11/2009, 15h44
  3. Occurences d'un caractère dans une chaîne
    Par meadup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/01/2007, 18h49
  4. occurence d'un caractére ds un tableau
    Par ender08450 dans le forum C
    Réponses: 4
    Dernier message: 28/12/2006, 11h57
  5. Première occurence d'une donnée
    Par bob33 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/06/2003, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo