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 :

recherche du bon masque pour preg_match [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut recherche du bon masque pour preg_match
    Bonjour,
    Je me remets doucement à la programmation et je suis en train de mettre au point un moteur de recherche sur mon site de chansons.
    Pour ce faire j'essaye de trouver le bon masque pour preg_match.
    Je passe à la variable $_GET['ancre'] la valeur |Ancré| (sans les pipes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    ini_set('display_errors', 'E_ALL');
    header( 'content-type: text/html; charset=utf-8' );
    $pourvoir=$_GET['ancre'];
    $motif='~\b(?:'.$pourvoir.')~';
    $textes=array('Ancré','ancré',' Ancré',' ancré','Ancrés','ancrés',' Ancrés',' ancrés');
    foreach($textes as $texte){
            if(preg_match($motif,' '.$texte)){
                    echo 'Jes ', $motif,' |',$texte,'|<br />';
                    }
             else{
                    echo '<em>Ne ', $motif,' |',$texte,'|</em><br />';
                    }
            }
    Et voilà ce que je reçois en retour ce qui n'est pas le résultat attendu:
    Jes ~\b(?:Ancré)~ |Ancré|
    Ne ~\b(?:Ancré)~ |ancré|
    Jes ~\b(?:Ancré)~ | Ancré|
    Ne ~\b(?:Ancré)~ | ancré|
    Jes ~\b(?:Ancré)~ |Ancrés|
    Ne ~\b(?:Ancré)~ |ancrés|
    Jes ~\b(?:Ancré)~ | Ancrés|
    Ne ~\b(?:Ancré)~ | ancrés|
    puisque cela ne devrait matcher que pour le premier et le troisième item de l'array $textes.
    Il y a donc quelque chose qui cloche dans le motif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $motif='~\b(?:'.$pourvoir.')~';
    mais quoi ?
    Je sèche, lamentablement.
    Merci de me lire et, a fortiori, de m'aider.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour obtenir le résultat voulu, tu dois écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $motif = '~\bAncré\b~u';
    Le groupe non-capturant n'est pas utile, je l'ai enlevé.
    Pour n'obtenir que les mots ne se finissant pas par un s, tu dois également délimiter ton motif avec un word-boundary \b à droite. Mais, petite subtilité, le word-boundary est la limite entre un caractère de la classe \w et autre chose (un caractère n'appartenant pas à cette classe ou la limite de la chaîne). Or, par défaut la classe \w est équivalente à [a-zA-Z0-9_], donc les lettres accentuées n'y figurent pas.
    Mais si j'ajoute le modificateur u, la classe \w est étendue à toutes les lettres et les chiffres de la table unicode (plus le underscore), ce qui inclus les lettres accentuées. Ce qui impacte donc le comportement du word-boundary.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    mister-regex est impressionnant
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Merci beaucoup CosmoKnacki

    J'ai suivi tes recommandations (à la lettre si j'ose dire) mais le résultat n'est toujours pas celui attendu.
    J'ai même corsé en ajoutant un item à $texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $textes=array('Ancré','ancré',' Ancré',' ancré','Ancrés','ancrés',' Ancrés',' ancrés','Ancré,');
    car je souhaite aussi que si le mot est suivi d'une virgule il soit retenu par preg_match
    Or voici ce que j'obtiens
    Ne ~\bAncré\b~u |Ancré|
    Ne ~\bAncré\b~u |ancré|
    Ne ~\bAncré\b~u | Ancré|
    Ne ~\bAncré\b~u | ancré|
    Jes ~\bAncré\b~u |Ancrés|
    Ne ~\bAncré\b~u |ancrés|
    Jes ~\bAncré\b~u | Ancrés|
    Ne ~\bAncré\b~u | ancrés|
    Ne ~\bAncré\b~u |Ancré,|
    presque le contraire de ce que je voudrais.
    Je souhaite que soit retenus |Ancré|, | Ancré| et |Ancré,| et non |Ancrés| et | Ancrés|.
    Avec un autre exemple de mot je voudrais que |malheur| soit retenu mais pas |malheurs| ni |malheureux|
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Et pourtant ça fonctionne: https://3v4l.org/8LDv3#v8.2.9

    Quelle est ta version de PHP ?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    C'est sur le serveur fédératif de mon hébergeur, je crois qu'il est en PHP5. (5.2.17 d'après phpinfo)

    Le script se lance comme ça :
    http://www.avcxjo-moko-kantas.fr/job...cre=Ancr%C3%A9
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai essayé le script avec l'outil https://3v4l.org (nickel cet outil que je connaissais pas) en me mettant en 5.2.17 et ça donne
    <em>Ne ~\bAncré\b~u |Ancré|</em><br />
    <em>Ne ~\bAncré\b~u |ancré|</em><br />
    <em>Ne ~\bAncré\b~u | Ancré|</em><br />
    <em>Ne ~\bAncré\b~u | ancré|</em><br />
    Jes ~\bAncré\b~u |Ancrés|<br />
    <em>Ne ~\bAncré\b~u |ancrés|</em><br />
    Jes ~\bAncré\b~u | Ancrés|<br />
    <em>Ne ~\bAncré\b~u | ancrés|</em><br />
    <em>Ne ~\bAncré\b~u |Ancré,|</em><br />
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    En résumé, il ne me reste plus qu'à me tourner vers mon hébergeur pour savoir quand il envisage de nous faire tourner sous une version de PHP moins vétuste que la 5.2.17.
    Cela dit, je n'ai rien trouvé dans la documentation PHP de preg_match sur ce problème ni, donc, quant au moyen de le contourner.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    C'est pas évident à contourner, la meilleure chose à faire c'est de changer d'hébergeur car PHP 5.2, c'est du foutage de gueule, la version actuelle c'est 8.2.

    En attendant, tu peux toujours bricoler ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $motif = '~(?<![\pL\pN_]|\pL\p{Mn}|\pL\p{Mn}\p{Mn})Ancré(?![\pL\pN_])~u';
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    PHP 5, ça doit dater de 2006 ou 2007...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    PHP 5.0.0 : 13 Jul 2004
    PHP 5.6.40: 10 Jan 2019

    et la version 5.2.17: 06 Jan 2011.


    https://www.php.net/ChangeLog-5.php

    Le "bug" dont il est question ici est corrigé à la version 5.3.4 avec le passage à la version 8.10 de PCRE.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  12. #12
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    C'est pas évident à contourner, la meilleure chose à faire c'est de changer d'hébergeur car PHP 5.2, c'est du foutage de gueule, la version actuelle c'est 8.2.

    En attendant, tu peux toujours bricoler ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $motif = '~(?<![\pL\pN_]|\pL\p{Mn}|\pL\p{Mn}\p{Mn})Ancré(?![\pL\pN_])~u';
    C'est un ami, qui me fait un vrai prix d'ami pour héberger mon site de chansons.
    Nous modérions, à l'époque, le petit forum PHP Débutants aujourd'hui plus ou moins moribond.
    Je leur ai envoyé un courriel mais ils sont en vacances jusqu'au 28 date à laquelle je pars moi-même en villégiature pour une quinzaine.
    Merci en tout cas, je vais essayer, en attendant, ta proposition de masque, et surtout d'en comprendre le fonctionnement.
    De toute façon, j'ai fini de faire mes confitures et ma 4in s'occupe des bagages, donc j'ai un peu de temps.

    Je vais mettre le post à RÉSOLU, même si ce n'est pas tout à fait vrai encore.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  13. #13
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    J'ai mis ton masque tarabiscoté sur mon site et ça à l'air de fonctionner.Nom : Sercxilo.php avec Ancré du 2023-08-25 12-37-16.png
Affichages : 73
Taille : 248,4 Ko
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  14. #14
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 991
    Points
    2 991
    Par défaut
    Clin d'œil : lorsque ton site sera hacké (extraordinaire que ce ne soit pas déjà le cas ł, ton ami le restera-t-il ? C'est vraiment pas acceptable d'avoir une version de php datant de la préhistoire pour un site Web accessible à tout un chacun.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  15. #15
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Clin d'œil : lorsque ton site sera hacké (extraordinaire que ce ne soit pas déjà le cas ł, ton ami le restera-t-il ? C'est vraiment pas acceptable d'avoir une version de php datant de la préhistoire pour un site Web accessible à tout un chacun.
    Quel intérêt, et pour qui, de pirater ce site ? Le tout un chacun se résume à une vingtaine de visiteurs différents par jour après onze années depuis sa création.
    Je vais bientôt avoir 72 ans, si mon site est piraté, je le fermerai et ciao la compagnie. J'y survivrai probablement un peu.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  16. #16
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 991
    Points
    2 991
    Par défaut
    Ah mais le site en lui-même n'a strictement aucune valeur. Les pirates n'y vont même pas. Ce sont des scripts (des programmes) qui analysent le Web et, au petit bonheur la chance, trouvent des sites, s'y rendent et essaient d'exploiter des attaques selon des listes de failles. Vraiment peu importe le site, ce qui a de la valeur, ce sont les ressources du serveur qui peut alors être utilisé pour lancer des spam par millions, héberger de faux sites (phishing), etc.

    C'est bien le serveur qui intéresse les pirates, pas le site.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  17. #17
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Ah mais ....
    Du coup, ce serait le problème de l'hébergeur Wd-Média, je doute que Nicolas et Margaux soient inconscients des risques.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  18. #18
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 991
    Points
    2 991
    Par défaut
    La question reste alors pourquoi ont-ils encore une version de php 5.x sur un serveur connecté à internet. C'est juste... fou et audacieux.

    (cela étant on s'est fortement écarté du sujet de ce post).

    Bonne journée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

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

Discussions similaires

  1. [MySQL] recherche du bon critere pour ma requete
    Par lamouche42 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/05/2010, 03h30
  2. [RegEx] Recherche du bon pattern pour une expression régulière
    Par erehcab dans le forum Langage
    Réponses: 9
    Dernier message: 17/03/2010, 13h06
  3. Réponses: 7
    Dernier message: 18/05/2009, 17h05
  4. Recherche du bon évènement pour un SELECT
    Par PedroBD dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/12/2006, 13h17
  5. Réponses: 3
    Dernier message: 09/10/2005, 19h10

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