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 :

Expression régulière en PHP [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Points : 16
    Points
    16
    Par défaut Expression régulière en PHP
    Bonjour,

    Je cherche un peu d'aide concernant une expression régulière.
    Après avoir fait un print_r de ma variable $searchParams j'obtiens le résultat ci-dessous :

    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
    Array
    (
        [hasValue] => 1
        [where] => Array
            (
                [0] => Array
                    (
                        [0] => ((r.state LIKE '%6%') OR (r.state='6'))
                        [1] => ((r.school LIKE '%7%') OR (r.school='7'))
                    )
     
                [1] => Array
                    (
                    )
     
            )
    )
    Je souhaiterais à partir d'un expression régulière obtenir le motif suivant sachant que les chiffres ne sont pas obligatoirement 6 et 7, l'expression régulière devrait ressembler à ca j'imagine (ereg_replace("r.state LIKE '%6%') OR ","",$searchParams)) mais ça ne marche pas:

    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
    Array
    (
        [hasValue] => 1
        [where] => Array
            (
                [0] => Array
                    (
                        [0] => (r.state='6')
                        [1] => (r.school='7')
                    )
    
                [1] => Array
                    (
                    )
    
            )
    )
    Merci d'avance :-)

  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 : 55
    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
    Bonjour,

    j'ai pas tout compris...

    tu veux un truc comme ça ? :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    $arValues= array (
        'hasValue' => 1,
        'where' => array(
                array(
                   "((r.state LIKE '%6%') OR (r.state='6'))",
                   "((r.school LIKE '%7%') OR (r.school='7'))",
                ),
                array()
         )
    );
     
    $arRes= $arValues;
    $arRes['where'] = array();
    $pattern = '#(.*)OR(.*)\)#i';
     
    if(isset($arValues['where'])) {
       foreach($arValues['where'] as $ar) {
          if(count($ar)) {
             foreach($ar as $criteria) {
                preg_match($pattern, $criteria, $matches);
                if(count($matches) == 3) $arRes['where'][]= $matches[2];
             }
          }
       }
    }
     
    echo "<h3>avant : </h3><pre>";
    print_r($arValues);
    echo "</pre><hr />";
     
    echo "<h3>apres : </h3><pre>";
    print_r($arRes);
    echo "</pre><hr />";
    ?>
    Images attachées Images attachées  

  3. #3
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Et pour compléter ska_root, pour avoir n'importe quel chiffre, autant bien 6 et 7 que 8 et 9... :

    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
    28
    29
    30
    31
    32
    33
    $arValues= array (
        'hasValue' => 1,
        'where' => array(
                array(
                   "((r.state LIKE '%9%') OR (r.state='6'))",
                   "((r.school LIKE '%8%') OR (r.school='7'))",
                ),
                array()
         )
    );
     
    $arRes= $arValues;
    $arRes['where'] = array();
    $pattern = '#(.*)([0-9]*)(.*)OR(.*)\)#i';
     
    if(isset($arValues['where'])) {
       foreach($arValues['where'] as $ar) {
          if(count($ar)) {
             foreach($ar as $criteria) {
                preg_match($pattern, $criteria, $matches);
                if(count($matches) == 5) $arRes['where'][]= $matches[1].$matches[2].$matches[3];
             }
          }
       }
    }
     
    echo "<h3>avant : </h3><pre>";
    print_r($arValues);
    echo "</pre><hr />";
     
    echo "<h3>apres : </h3><pre>";
    print_r($arRes);
    echo "</pre><hr />";
    Enjoy

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 13
    Points : 16
    Points
    16
    Par défaut Merci
    Merci beacucoup, j'ai déja commencé à l'adapter à mon code en modifiant une petite chose et ça marche plutot bien :

    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
    28
    $arRes= $searchParams;
    $arRes['where'] = array();
    $arRes['where'][0] = array();
    $pattern = '#(.*)OR(.*)\)#i';
     
    if(isset($searchParams['where'])) {
    $key=0;
       foreach($searchParams['where'] as $ar) {
    ;
       echo $key;
          if(count($ar)) {
             foreach($ar as $criteria) {
     
                preg_match($pattern, $criteria, $matches);
     
                if(count($matches) == 3){ $arRes['where'][0][$key] = $matches[2];$arRes['where'][1]= array(); $key+=1;}
             }
          }
       }
    }
     
    echo "<h3>avant : </h3><pre>";
    print_r($searchParams);
    echo "</pre><hr />";
     
    echo "<h3>apres : </h3><pre>";
    print_r($arRes);
    echo "</pre><hr />";
    Le dernier problème est que ça me renvoie bien :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    avant :
     
    Array
    (
        [hasValue] => 1
        [where] => Array
            (
                [0] => Array
                    (
                        [0] => ((r.title LIKE '%ma%') OR (r.title='ma'))
                        [1] => ((r.city LIKE '%fsdfsd%') OR (r.city='fsdfsd'))
                        [2] => ((r.state LIKE '%17%') OR (r.state='17'))
                        [3] => ((r.school LIKE '%12%') OR (r.school='12'))
                    )
     
                [1] => Array
                    (
                    )
     
            )
     
        [link_search] => index.php?option=com_jobs&task=search_resume&Itemid=8&user_id=87&db_title=ma&db_city=fsdfsd&db_state=17&db_school=12
    )
     
    apres :
     
    Array
    (
        [hasValue] => 1
        [where] => Array
            (
                [0] => Array
                    (
                        [0] =>  (r.title='ma')
                        [1] =>  (r.city='fsdfsd')
                        [2] =>  (r.state='17')
                        [3] =>  (r.school='12')
                    )
     
                [1] => Array
                    (
                    )
     
            )
     
        [link_search] => index.php?option=com_jobs&task=search_resume&Itemid=8&user_id=87&db_title=ma&db_city=fsdfsd&db_state=17&db_school=12
    )
    J'aimerais que ça m'enlève le LIKE que pour school et state mais je n'arrive pas à trouver comment faire ma condition sur r.state et r.school.

    J'espère être clair!

    Merci encore.

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

Discussions similaires

  1. [RegEx] Construction de l'expression régulière avec php
    Par glodybiss4 dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2012, 12h10
  2. [PHP 5.0] expressions régulières en PHP
    Par Souri84 dans le forum Langage
    Réponses: 10
    Dernier message: 19/04/2011, 13h29
  3. [RegEx] expression régulière et php
    Par isa28 dans le forum Langage
    Réponses: 6
    Dernier message: 09/01/2009, 00h31
  4. [RegEx] Expressions régulières en PHP
    Par goldorax113 dans le forum Langage
    Réponses: 3
    Dernier message: 12/05/2006, 10h20
  5. [RegEx] Expression régulière en PHP
    Par sansouna24 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 22h44

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