REGEX

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : REGEX

Re: REGEX

par Akavir » 24 juil. 2019, 13:35

D'accord, en tous cas ça m'aura bien aidé, j'avais rien compris du tout !
Je fais aller faire un tour sur ton lien et travailler ces expressions régulières !

à la prochaine !

Re: REGEX

par Saian » 24 juil. 2019, 13:15

En fait tu peux vérifier par preg_match aussi qu'il n'y a pas de o mais avec un preg_match('`o`', $string) tout simplement, sans quantifier.
La ça ne capturera vraiment que les o mais ça ne te dira pas si des o se suivent. false si pas de o et true si o présents.

Si le problème c'est de vérifier qu'il n'y a pas au moins 2 o qui se suivent l'expression serait plutôt o{2,}.
Si tu n'as que des o solos ça retournera false mais si tu as 2 o où plus qui se suivent ça retournera true.

PS : le ? on s'en sert aussi souvent comme une sorte de limiteur genre tu veux capturer tout ce qui est entre " mais tu veux capturer chaque groupe de " et non pas du premier au dernier tu fais : ".*?"
La par exemple le .* va capturer 2 " qui se suivent mais si tu fais ".+?" alors il faut que les " aient un contenu entre eux (au moins 1 caractère).
Avec "bon"jo"oou"r "",
".*?" capture "bon", "oou", ""
".+?" capture "bon", "oou"
".+" capture "bon"jo"oou"r ""

Tu as plusieurs site genre https://regexr.com/ qui te permettent de tester des regex pour mieux comprendre comment ça fonctionne.

Re: REGEX

par Akavir » 24 juil. 2019, 13:09

Un grand merci camarade, j'ai tout compris !

Re: REGEX

par Saian » 24 juil. 2019, 13:08

Bah chacun de ces quantifiers sont clairement utiles, ça dépend des expressions que tu as besoin d'écrire.

En l'occurrence si tu veux t'assurer qu'il n'y a pas de o dans ta chaine, je pense que tu peux oublier les expressions régulières et plutôt utiliser le strpos comme indiquer précédemment : strpos($string, 'o') === false

Les expressions régulières servent a capturer des éléments d'une chaine, pas à capturer des éléments non présents dans la chaine.
Ça retourne false quand rien n'est capturé, or là il y a bien des éléments capturés.

Re: REGEX

par Akavir » 24 juil. 2019, 13:04

D'accord je suis pas certain d'avoir calé,

ça veut bien dire que

même si j'écris boooooooooooooooooooooooooooooooooonjour mon script va renvoyer true

Dans ce cas quel est l'intérêt réel de * ou + ?

(merci pour ta patience)

Re: REGEX

par Saian » 24 juil. 2019, 12:59

Pas comme ça que ça fonctionne.
Là ton expression va capturer tous les o, mais un par un. Elle capture même tous les espacements entre chaque lettre.
Avec o+ ça capturerait o et ooo.
Et o* va capturer o et ooo mais aussi tous les espacements entre chaque lettre.

PS : si tu veux vérifier qu'il n'y a pas de o un strpos($string, 'o') === false sera plus approprié.

Re: REGEX

par Akavire » 24 juil. 2019, 12:55

justement il devrait renvoyer False non :o?
il y en plus qu'un là

et si il renvoie TRUE je ne comprend pas l'intérêt notamment par rapport à + et *

Re: REGEX

par Saian » 24 juil. 2019, 12:51

Salut, parce qu'il y a des o dans le string. Le ? est pour dire 0 ou 1. Je crois même que dans ce cas, même sans o dans le string ou même avec un string vide, ça va matcher à tous les coups.

REGEX

par akavir » 24 juil. 2019, 12:41

Bonjour

Sur mon cours de php il est dit que le quantifieur ? permet de constater 0 ou 1 fois la présence d'un caractère donné

if (preg_match('#o?#','bonjooour'))
{
echo 'TRUE';
}
else
{
echo 'FALSE';
}

renvoie TRUE, pourquoi ?