Petit soucis avec preg_match

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 : Petit soucis avec preg_match

Re: Petit soucis avec preg_match

par sirakawa » 06 avr. 2012, 14:27

Une lettre parmi 26 possibles, comment tu codes çà, on peut utiliser une expression régulière dans un strpos ?
On a parfois envie de dire "Apprends à lire avant d'essayer d'aligner des lignes de code. Et éventuellement souviens-toi que tu as un cerveau, enfin je suppose.".
Donc si tu avais lu la doc de strpos avant d edemander si cette fonctin accepte les expressions rationnelles, tu saurais que non, et que c'est pour cette raison que la doc officielle enpréfère l'emploi à celui de preg_match quand la chose recherchée est simple...
http://fr2.php.net/manual/fr/function.strpos.php
tu aurais vu qu'il sufit de créer
une chaine contenant tous les caractères qui peuvent apparaître en début de ligne
$str = "abcdefGhij.......";
d'extraire la première lettre de la ligne
$initiale = substr($ligne, 0,1);
et d'utiliser
$trouve = strpos($str, $initiale);
// variante insensible à la casse $trouve = stripos($str, $initiale);
if ($trouve !== false) // il y a une lettre intéressante
{
}

Autre solution:
faire un tableau des lettres possibles, extraire la première lettre de la ligne et se servir de in_array

Re: Petit soucis avec preg_match

par edel » 03 avr. 2012, 10:42

Une lettre parmi 26 possibles, comment tu codes çà, on peut utiliser une expression régulière dans un strpos ?

Re: Petit soucis avec preg_match

par sirakawa » 03 avr. 2012, 08:37

Utiliser preg_match pour faire un pareil test, n'est-ce pas utiliser la bombe atomique pour tuer une fourmi?
strpos en ferait autant à moindre frais.
extrait du manuel:
"N'utilisez pas preg_match() si vous voulez uniquement savoir si une chaîne est contenue dans une autre. Utilisez dans ce cas les fonctions strpos() ou strstr(), qui sont beaucoup plus rapides. "
Autant une expression régulière s'impose quand la chaîne recherchée n'est prévisible que par sa structure:
Une {(consonne oblgée parmi [cdpt] suivie d'une consonne facultative parmi[hlr] ) suivi d'une voyelle suivie d'une consonne facultative} ou (voyelle consonne)
autant pour chercher une lettre....

Re: Petit soucis avec preg_match

par edel » 03 avr. 2012, 08:22

Ah merci ! J'avais lu une autre doc qui était moins claire que le lien donné ici, du coup je n'avais pas compris la chose correctement...

Re: Petit soucis avec preg_match

par moogli » 02 avr. 2012, 21:58

salut,

http://expreg.com/symbole.php

le ^ au début indique la "négation" ;)

tu cherche donc ce qui n'est pas dans la classe.


@+

Petit soucis avec preg_match

par edel » 02 avr. 2012, 14:33

Bonjour,

Je vous soumets un petit soucis que je rencontre avec cette fonction. Je me suis documenté pour trouver la bonne syntaxe, j'arrive à quelque chose qui donne le résultat attendu mais d'une façon qui m'étonne...

Concrètement, je cherche à connaitre toutes les ligne d'un texte qui commencent par un caractère en minuscule ou un chiffre (donc pas par une majuscule).

J'ai donc écrit ceci :
while (!feof($fp)) {
    $ligne=fgets($fp, 4096);
	if (preg_match("/[^a-z0-9éôêàè]/", $ligne[0]) == 0)  {	
		echo $ligne[0];
        }
}
$ligne[0] étant le premier caractère de la ligne du texte en cours d'analyse.

Voici le retour sur un texte d'une certaine longueur :
ajvdqnanqdpndscppdp
Donc ca fonctionne... mais je ne comprends pas pourquoi la condition est respectée avec le retour de preg_match = 0 et non 1... quand la fonction trouve une correspondance avec le masque elle est censée retourner 1 il me semble, où est l'erreur ?

Merci d'avance pour votre aide !