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 :

Trouver des mots clés avec une regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut Trouver des mots clés avec une regex
    bonjour
    je cherche une astuce pour simplifier l'expression régulière suivante (qui fonctionne cependant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#(abstract|final|static|protected|public|private|)[ \t]*(abstract|final|static|protected|public|private|)[ \t]*(abstract|final|static|protected|public|private|)[ \t]*(abstract|final|static|protected|public|private|)[ \t]*function[ \t\n]+(&?[a-z0-9_]+)#i'
    le contexte est simple, j'ouvre un fichier php et j'utilise ceci pour récuperer la liste des fonctions avec leur prototypes... et donc je peux très bien vouloir matcher
    "function toto()" ou "static final public function titi()" ou les mots clés dans n'importe quel ordre ... l'interet et d'avoir une bonne approximation des fonctions/methodes déclarées dans un fichier même s'il ne se compile pas.

    en général je cherche à récupérer un nombre indeterminé de plusieurs mots clés connus disposés dans un ordre aléatoire.

    merci de votre aide.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonsoir,

    Je ne sais pas si j'ai bien compris ce que tu voulais exactement.

    j'ai essayé ceci
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    $texte= '
    public static $mavar = "mavar";
     
    public function getMaFunc1() {
    	return 1;
    }
     
    public static function getMaFunc2($params1) {
    	return 2;
    }
     
    function getMaFunc3($params3="3") {
    	return 3;
    }
     
    ';
     
    $pattern="#([^\\s].+\\s)*function([^\\(].*)\\(.*#";
    preg_match_all($pattern,$texte,$matches);
     
    if(count($matches)) {
     
    	$nb_fonctions= count($matches[0]);
    	for($i = 0; $i < $nb_fonctions; $i++) {
    		  echo "<p>la fonction <b>".$matches[2][$i]."</b> a les mots clés suivants : ".$matches[1][$i];
    	}
    }
    peut-être voulais-tu séparer les mots clés en plus ?


  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    idéalement oui. je vais réfléchir à ta réponse parce que je comprends pas tout intuitivement.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    j'hésite entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#(?:(?>(abstract)|(protected)|(private)|(static)|(public)|(final))\s+){0,5}function\s+(\w+)\s*\(#i'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#(?:(?:(abstract)|(protected)|(private)|(static)|(public)|(final))\s+){0,5}function\s+(\w+)\s*\(#i'
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  5. #5
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pour mémoire voici le texte démo:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public static $mavar = "mavar";
    const piege = 0;
     
    final function getMaFunc1() {
    	return 1;
    }
     
    protected static final function getMaFunc2
                  ($params1) {
    	return 2;
    }
     
    abstract protected function getMaFunc3($params3="3") {
    	return 3;
    }
     
    protected      abstract  function getMaFunc3b($params3="3") {
    	return 3;
    }
     
    function getMaFunc4(         ){
    }
     
    abstract private function foobar 
    ( $blablabla = null ){}
     
    $anonymous = function ()
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pour parser du PHP c'est avec le Tokenizer et/ou avec Reflection

  7. #7
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je veux pas parser le code, je veux être capable d'avoir une approximation qui réussi lorsque le code "compile" ou non.

    Parce que sinon je pourrai aussi compiler le fichier et l'executer et regarder quelle est la classe qui a été définie et quelles sont les méthodes à utiliser.

    En plus pour moi c'est l'occasion de m'améliorer sur l'écriture des regex, parce que je ne comprend pas pourquoi les résultats sont comme ils sont...
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  8. #8
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    du coup j'ai oublié un truc que j'utilise jamais
    http://fr.php.net/manual/fr/language...ces.return.php

    du coup ça devient...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#(?:(?>(abstract)|(protected)|(private)|(static)|(public)|(final))\s+){0,5}function\s+(&?\w+)\s*\(#i'
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

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

Discussions similaires

  1. [WD17] Récupération des mots-clés associés à une image
    Par golmon75 dans le forum WinDev
    Réponses: 3
    Dernier message: 10/12/2013, 10h45
  2. [RegEx] Trouver des mots entre des mots avec le Regex seulement
    Par mutkas10 dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2013, 10h48
  3. [RegEx] Remplacement des accents avec une regex
    Par benohit dans le forum Langage
    Réponses: 7
    Dernier message: 07/09/2006, 18h20
  4. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 00h57

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