Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/03/2007, 12h11   #1
Invité de passage
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 1
Points : 1
Par défaut je ne trouve pas l'expression

Bonjour.

Je galère un peu pour trouver la solution à mon problème.

En fait j'utilise des expressions régulières assez régulièrement et nottament dans des requêtes SQL. Ma question actuelle ne concerne pas rééllement l'utilisation des expressions régulières dans le SQL, rassurez-vous.

Mon soucis est le suivant : j'ai tout une grande liste de chaines de caractères et je ne veux que sélectionner leur valeur jusqu'au caractère "_" quand c'est possible.

Exemple?

Si j'ai test, test1, test2, test3_1, test4_2, je ne veux que récupérer les valeurs test1, test2, test3 et test4.

Du coup ma requête ressemblais à ca :
SELECT substring(monchamp from '^[^_]*')

L'expression ^[^_]* définissant une classe de caractères réprésentant tout sauf le "_" justement.

Hors je veux faire évoluer cette règle pour ne sélectionner leur valeur jusqu'à l a chaine "_2" quand c'est possible !

Exemple?

Si j'ai test, test1, test2, test3_1, test4_2, je ne veux que récupérer les valeurs test1, test2, test3_1 et test4.

Je me voyais donc faire évoluer mon expression ^[^_]* en autre chose... mais je n'y arrive pas

Une idée?

Merci bien
vivi_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 13h08   #2
Membre à l'essai
 
Inscription : décembre 2005
Messages : 22
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : décembre 2005
Messages : 22
Points : 23
Points : 23
Peut-être:
si j'ai bien compris l'énoncé.
Hansolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 13h20   #3
Invité de passage
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 1
Points : 1
Je vais juste donner un exemple plus visuel (souligné, ce qui m'étais retourné)

AVANT (avec ^[^_]*)

expression1
expression2
expression3
expression4
expression4_1

APRES (enfin ce que je voudrai)

expression1
expression2
expression3
expression4
expression4_1
expression4_2

Merci pour votre aide.
vivi_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 13h33   #4
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Je n'ai pas compris ton message ci-dessus. Par contre, pour ce que je comprends du premier message, dans un cadre PHP, ça donnerait quelque chose du genre
Code :
1
2
3
4
5
6
7
8
 
//$subject = 'chaîne à tester';
$matches = array();
if ( preg_match( '/^([^_]+)($|_1)?/', $subject, $matches ) ) {
  $out = $matches[ 1 ].$matches[ 2 ];
} 
 
print( $out );
+ un contrôle sur $matches[ 2 ] qui n'est pas forcément défini.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 14h15   #5
Invité de passage
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 1
Points : 1
Ah merci Herode tu m'as mis sur la piste

Ce que je voulais étais en fait : ^([^_]*)($|_[^2])*([^_]*)

Merci beaucoup.
vivi_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h46.


 
 
 
 
Partenaires

Hébergement Web