preg_match() & strpos()

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par thierry8, 28 Avril 2006.

  1. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Hello,

    J'utilise une fonciton preg_match() pour vérifier si un saut de ligne est détecté, soit : preg_match('`\\r\\n`iU',$val);

    Je sais que la fonction strpos() est bien plus rapide..
    Si je ne m'en servais que dans une seule vérification, je n'irais pas chercher la puce, mais dans mon cas, j'en est un besoin important. Je chercher donc à gagner en performance. Bref...la question n'est pas là !

    Est-il possible de vérifier un saut de ligne avec la fonction strpos() ?
    Si oui comment ?

    J'avais essayé cela, mais sans succès:
    strpos('\r\n',$val) ou strpos("\r\n",$val) ou strpos('\\r\\n',$val) ou strpos("\\r\\n",$val)
     
  2. rikew
    rikew WRInaute impliqué
    Inscrit:
    19 Décembre 2002
    Messages:
    683
    J'aime reçus:
    2
    je dit ca comme ca j'ai pas testé, mais peut être :
    strpos("
    ",$val)
     
  3. ch_lensois
    ch_lensois WRInaute discret
    Inscrit:
    27 Octobre 2004
    Messages:
    141
    J'aime reçus:
    0
    t'a essayer de voir sur la reference "php.net", je pense que tu y trouvera ton bonheur ;)
     
  4. mumbly
    mumbly WRInaute discret
    Inscrit:
    23 Novembre 2005
    Messages:
    66
    J'aime reçus:
    0
    essaye avec ca:
    strpos($str,chr(10));
     
  5. dd32
    dd32 WRInaute accro
    Inscrit:
    9 Septembre 2005
    Messages:
    2 705
    J'aime reçus:
    0
    Si je me fie à ça, et si j'ai bien compris le problème :
    Code:
    <?php
      $mystring = "blablabla\r\n";
      $findme = "\r\n";
      $pos = strpos($mystring, $findme);
    ...
    ?>
    
    Ca dépend c'est quoi $val ? c'est la valeur à trouver dans "\r\n"
    ou bien plutôt tu cherches "\r\n" dans $val ?
    Si c'est le 2ème cas :
    Code:
    strpos($val,"\r\n")
    non ?
     
  6. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Oui bien vue dd32.

    Je l'ai remarqué aussi ! pff le boulet que je fais... :x

    Et personne ne la remarqué... :D ça me rassure.
    Je vais voir cela et vous informe.
     
  7. dd32
    dd32 WRInaute accro
    Inscrit:
    9 Septembre 2005
    Messages:
    2 705
    J'aime reçus:
    0
    ben, ça arrive :lol: surtout quand on manipule d'autres fonctions tournées à l'envers...

    note que mumbly t'as donné un équivalent aussi :wink:
     
  8. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Ok, c'est fonctionnel.

    Impecc. Merci et désolé de la discussion inutile du fait de ma connerie. :? :roll:

    EDIT: vi, j'ai vue, mais autant ne pas utiliser une fonction supplémentaire, en l'occurence chr(), vu que le but était de gagné en perf. ;) Les doubles quotes fonctionne parfaitement.
     
  9. dd32
    dd32 WRInaute accro
    Inscrit:
    9 Septembre 2005
    Messages:
    2 705
    J'aime reçus:
    0
    pas grave... tu nous excuseras les nôtres dans d'autres cas :wink:
     
  10. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    J'en profite tant que j'y suis. :D

    En terme de performance que vaut-il mieux faire pour un grand nombre d'appel au premier ou deuxième cas : (simple exemple)

    Code:
        $texte = preg_replace_callback('`\[1\].+\[/1\]`iU', array($this,'test'), $texte);
        $texte = preg_replace_callback('`\[2\].+\[/2\]`iU', array($this,'test'), $texte);
        $texte = preg_replace_callback('`\[3\].+\[/3\]`iU', array($this,'test'), $texte);
        $texte = preg_replace_callback('`\[4\].+\[/4\]`iU', array($this,'test'), $texte);
        $texte = preg_replace_callback('`\[5\].+\[/5\]`iU', array($this,'test'), $texte);
        $texte = preg_replace_callback('`\[6\].+\[/6\]`iU', array($this,'test'), $texte);
    OU

    Code:
        //$texte = preg_replace_callback('`\[(1|2|3|4|5|6)\].+\[/(1|2|3|4|5|6)\]`', array($this,'test'), $texte);
    Avec dans la fonction test la gestion de si la valeur 1 et bien égale à la valeur 2.

    N'est pas la seconde qui est le plus long finalement, même si l'on ne fait appel qu'à un seul preg_replace_callback(), du fait qu'il doit comparer 1 devant pour 1|2|3|... dernière et ainsi de suite ?

    Merci de votre aide et avis. ;)
     
  11. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Personne n'a une idée ?
     
  12. SuperPJ
    SuperPJ WRInaute occasionnel
    Inscrit:
    15 Janvier 2005
    Messages:
    413
    J'aime reçus:
    0
    Juste une petite précision (au cas où ;) ) : pour vérifier que "\r\n" est contenu dans $val, il ne faut pas faire :
    Code:
    if ( strpos($val,"\r\n") )
    mais :
    Code:
    if ( strpos($val,"\r\n")!==false )
    ;) car si "\r\n" est en début de chaîne, ça renverra 0 ...


    Sinon pour répondre à ta 2nde question, je pense que :
    Code:
    $texte = preg_replace_callback('`\[(1|2|3|4|5|6)\].+\[/(1|2|3|4|5|6)\]`', array($this,'test'), $texte);
    est plus rapide car ca teste et remplace l'expression une seule fois tandis que dans l'autre cas ça le fait 6 fois. Je pense que c'est comme si on se demandait quel est le plus rapide entre un :
    Code:
    $texte = str_replace(array('a','b','c'), array('A','B','C'), $texte);
    ou un :
    Code:
    $texte = str_replace('a', 'A', $texte);
    $texte = str_replace('b', 'B', $texte);
    $texte = str_replace('c', 'C', $texte);
    Maintenant faut faire des boucles chronométrées pour le vérifier :p mais je pense que tout mettre en une seule expression c'est plus rapide malgré la complexité, d'autant que la version Perl des regexp (preg) est vraiment très performante :D
     
  13. thierry8
    thierry8 WRInaute accro
    Inscrit:
    11 Juillet 2005
    Messages:
    2 728
    J'aime reçus:
    0
    Oui merci pour le "!==false". A ce niveau c'était good.

    Et merci pour ton avis. C'est la solution pour laquel j'ai effectivement opté.
     
Chargement...
Similar Threads - preg_match() strpos() Forum Date
Problème de preg_match(). Développement d'un site Web ou d'une appli mobile 15 Mai 2020
Warning: preg_match() [function.preg-match]: Développement d'un site Web ou d'une appli mobile 22 Août 2008
Une recherche dans une variable avec un preg_match(); URL Rewriting et .htaccess 12 Mai 2006
la fonction strpos(); Développement d'un site Web ou d'une appli mobile 19 Octobre 2009
Fonction strpos() Problèmes de référencement spécifiques à vos sites 19 Juillet 2004