Aide petite regex

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par eskimo, 28 Juin 2022.

  1. eskimo
    eskimo WRInaute discret
    Inscrit:
    21 Octobre 2007
    Messages:
    212
    J'aime reçus:
    2
    Hello,
    Je galère depuis toujours avec les REGEX et je n'arrive pas depuis 30 minutes à trouver la règle pour trouver :
    tous les mots commençant par @ et qui ne comprenne pas de .

    je suis parti sur quelque chose comme :
    \B@\w+


    mais je n'arrive pas à exclure les mots avec un . à l'intérieur.

    chaîne :
    @nicolassss email@ddd.dddd
    @rrrrrrrrrr
    Edit the Expr@ession

    Merci pour votre aide.
     
    #1 eskimo, 28 Juin 2022
    Dernière édition: 28 Juin 2022
  2. emualliug
    emualliug WRInaute occasionnel
    Inscrit:
    1 Février 2020
    Messages:
    480
    J'aime reçus:
    110
    Le problème c'est que le point est lui-même une limite de mot (word boundary), et donc quelques chose comme \B(@\w+)\b ne marchera pas.

    Par contre, on peut combiner ça avec un negative lookahead :
    Code:
    \B(@\w+)(?!\.)\b
    Je suis un peu plus circonspect par l'usage de \B, mais je pense que c'est à nouveau parce que @ n'est pas lui-même un caractère de mot.
     
    eskimo apprécie ceci.
  3. eskimo
    eskimo WRInaute discret
    Inscrit:
    21 Octobre 2007
    Messages:
    212
    J'aime reçus:
    2
    Salut @emualliug , l'idée c'est d'identifier dans une conversation des users de mon site, comme je viens de le faire à l'instant avec toi.
    Ton code fonctionne bien. Merci beaucoup.
    Tu es développeur? Ca prends du temps à bien maitriser les regex ?
     
  4. emualliug
    emualliug WRInaute occasionnel
    Inscrit:
    1 Février 2020
    Messages:
    480
    J'aime reçus:
    110
    Je me considère plus comme un bidouilleur qu'un développeur.

    J'apprécie beaucoup les regex qui sont à la fois puissantes et relativement simples. Il y a quelques subtilités à connaître (notamment les lookahead), mais après on apprend surtout au fur et à mesure et sur le tas, surtout que je suis assez mauvais sur la théorie (faut pas me demander une regex comme ça avec un papier et un stylo).

    https://regex101.com/ est vraiment top pour tester ses expressions.

    Après, je pense qu'il faut avoir un esprit "tourné" regex, comprendre comment ça fonctionne et comment ça peut être utile (ou pas). On a d'ailleurs vite fait de vouloir faire du "pur regex" là où il faudrait faire autrement. C'est par exemple le cas du traitement d'un HTML, même si pour des traitements simples j'ai tendance à le faire par simplicité (mais c'est pas idéal pour plein de raisons).

    La difficulté majeure, c'est donc de comprendre de quel type d'expression tu as besoin pour cibler tous les cas que tu vises sans faux positif.

    Par exemple, dans ton cas, la regex telle que tu l'imagines ne convient pas si l'utilisateur est cité à la fin d'une phrase, du genre "c'est un cas classique qu'a déjà rencontré @pinpin."
     
  5. eskimo
    eskimo WRInaute discret
    Inscrit:
    21 Octobre 2007
    Messages:
    212
    J'aime reçus:
    2
    tu as l'air de kiffer les regex :) et tu dois pas être si mauvais que ça en théorie ( tout est relatif)
    J'abuse mais c'est quoi l'utilité de la lettre à la fin comme \b dans
    Code:
    \B(@\w+)(?!\.)\b
    car des fois je vois g ( comme par exemple par défaut dans l'outil que j'utilisais ici https://regexr.com/
    T'as un cours qui tient sur 1 feuille A 4sur les regex que tu conseillerais?
     
  6. emualliug
    emualliug WRInaute occasionnel
    Inscrit:
    1 Février 2020
    Messages:
    480
    J'aime reçus:
    110
    Alors, pour le coup, c'est pas du tout la même chose. Généralement les caractères après un antislash, du genre \w, \d, \s, etc. représentent soit un caractère spécial (\r pour un retour chariot, \n pour un line break, \t pour une tabulation (de même que \v [espace vertical] et \f [saut de page], mais que je n'ai pas rencontré en pratique), soit une classe de caractères, respectivement [A-Za-z0-9_], [0-9], [\t\r\n\v\f], etc.

    \b (et \B) sont un peu spéciaux, ils visent les limites des mots "word boundary", mais ne les englobent pas. Par exemple "\btu" va trouver "tuteur (puisque "tu" est en début de mot) mais non "bitume" ou "battu". De la même manière "tu\b" ne va détecter que "battu". Mais la regex ne retourne pas le caractère qui matérialise la séparation des mots (par exemple l'espace avant "tuteur" ou celui après "battu"). En fait on pourrait d'ailleurs représenter \b et \B comme des look ahead (référence arrière, le terme français m'est revenu).

    C'est très différent des caractères g ou m (parfois notés séparément /g ou /m et ensemble /gm), il s'agit là de drapeaux ("flags"), le premier pour indiquer à la regex qu'elle doit être globale (retourner toutes les occurrences et non seulement la première) et la seconde analyser toutes les lignes ensemble (multiline).

    Pourquoi "/", et bien il s'agit d'un délimiteur. Dans la notation PCRE, on inscrit l'expression rationnelle à proprement parler entre deux délimiteurs et on la fait suivre des drapeaux, par exemple "/bla/g". Un délimiteur peut être toute caractère non alphanumérique (sauf une espace ou un backslash). / est très largement utilisé, mais on peut lui préférer #, ~, @, %, etc. On choisit généralement un caractère qu'on aura pas besoin d'échapper dans l'expression rationnelle, c'est pour ça que / convient assez bien… sauf pour les recherches dans les chemins d'accès et URL.
     
    Marie-Aude apprécie ceci.
  7. eskimo
    eskimo WRInaute discret
    Inscrit:
    21 Octobre 2007
    Messages:
    212
    J'aime reçus:
    2
    Merci pour ton retour.
    Au passage tu as l'air + modeste que "pas bon en théorie" ;)
     
Chargement...
Similar Threads - Aide petite regex Forum Date
Petite aide avec les regex :D Développement d'un site Web ou d'une appli mobile 25 Juin 2007
Petite aide pour faire un bash unix Administration d'un site Web 4 Août 2011
Petite aide traduction :) Débuter en référencement 13 Juin 2010
Hello ,petite aide à une question qui reste sans reponse pour moi ! Crawl et indexation Google, sitemaps 2 Septembre 2009
Aidez moi! Comment lancer un site de petites annonces? Débuter en référencement 28 Juin 2009
Besoin d'une petite aide pour referencement google Problèmes de référencement spécifiques à vos sites 20 Juin 2009
Petite aide en Javascript (afficher, cacher, délais, stop) Développement d'un site Web ou d'une appli mobile 1 Mars 2009
petite aide pour formulaire de connexion coolsmile Développement d'un site Web ou d'une appli mobile 4 Septembre 2006
RESOLU Grande incompréhension pour les htaccess, petite aide URL Rewriting et .htaccess 21 Mai 2006
petite aide pour rewrting de l'index URL Rewriting et .htaccess 5 Novembre 2005
fonction pref_match_all php petite aide Administration d'un site Web 30 Octobre 2005
Petites "aides" et/ou "explications" Débuter en référencement 19 Juillet 2005
Petite aide demandée Problèmes de référencement spécifiques à vos sites 5 Juin 2005
Petite aide demandée Administration d'un site Web 5 Juin 2005
Une petite aide pour que mon site soit sur google? Problèmes de référencement spécifiques à vos sites 29 Avril 2005
petite aide pour petit probleme sql et php ( de variable Administration d'un site Web 2 Novembre 2004
Besoin d'une petite aide svp. Problèmes de référencement spécifiques à vos sites 22 Octobre 2004
Petite aide requise pour une regle URL Rewriting et .htaccess 12 Novembre 2003
Besoin petite aide pour rewrite 10 derniers messages forum URL Rewriting et .htaccess 10 Août 2003
Aide mémoire de fin d’étude Le café de WebRankInfo Vendredi à 00:52