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 26/01/2012, 15h09   #1
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Par défaut créer une expression régulière ?

Bonjour,

Je dois créer une expression régulière qui analyse ces lignes :
Code :
1
2
3
 
TEXTE1 - TEXTE2 NOMBRE1 TEXTE3 - TEXTE4
TEXTE1 - TEXTE2  TEXTE3 - TEXTE4
Je dois pouvoir extraire la partie NOMBRE1 TEXTE3 et TEXTE3 des deux différents cas.

Cependant, je n'arrive pas à le faire...

Merci pour votre aide,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 16h48   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 018
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 018
Points : 5 081
Points : 5 081
Expressions conditionnelles et hop:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$str1 = 'foo - bar 10 baz - foobar';
$str2 = 'foo - bar  baz - foobar';
 
$regex = '~(?<mot1>\w+)\s*-\s*(?<mot2>\w+)\s*(?<number>\d+)?\s*(?<mot3>\w+)\s*-\s*(?<mot4>\w+)~';
 
if (preg_match($regex, $str1, $matches)) {
	var_dump($matches);
}
 
if (preg_match($regex, $str2, $matches)) {
	var_dump($matches);
}
Produit:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
array
  0 => string 'foo - bar 10 baz - foobar' (length=25)
  'mot1' => string 'foo' (length=3)
  1 => string 'foo' (length=3)
  'mot2' => string 'bar' (length=3)
  2 => string 'bar' (length=3)
  'number' => string '10' (length=2)
  3 => string '10' (length=2)
  'mot3' => string 'baz' (length=3)
  4 => string 'baz' (length=3)
  'mot4' => string 'foobar' (length=6)
  5 => string 'foobar' (length=6)
 
array
  0 => string 'foo - bar  baz - foobar' (length=23)
  'mot1' => string 'foo' (length=3)
  1 => string 'foo' (length=3)
  'mot2' => string 'bar' (length=3)
  2 => string 'bar' (length=3)
  'number' => string '' (length=0)
  3 => string '' (length=0)
  'mot3' => string 'baz' (length=3)
  4 => string 'baz' (length=3)
  'mot4' => string 'foobar' (length=6)
  5 => string 'foobar' (length=6)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 17h50   #3
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Bonjour,

Merci pour votre réponse aussi rapide et complète !

C'est exactement ce que je voulais faire !

ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 18h17   #4
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Bonjour Benjamin,

Je viens de tester votre code, il ne fonctionne pas avec mes données.

Voici un exemple concret :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
	$str1 = 'LE MOTIF DU PROBLEME - NOM DE LA COMMUNE 1 RUE DE LA COMMUNE - VEHICULE 1';
	$str2 = 'LE MOTIF DU PROBLEME - NOM DE LA COMMUNE  RUE DE LA COMMUNE - VEHICULE 2';
 
	$regex = '~(?<motif>\w+)\s*-\s*(?<commune>\w+)\s*(?<numero>\d+)?\s*(?<voie>\w+)\s*-\s*(?<vehicule>\w+)~';
 
	if( preg_match($regex, $str1, $matches) )
	{
		echo 'Adresse : '.$matches[2].' '.$matches[3].', '.$matches[1].'<br/>';
	}
 
	if( preg_match($regex, $str2, $matches) )
	{
		echo 'Adresse : '.$matches[2].' '.$matches[3].', '.$matches[1];
	}
?>
Je suis en train actuellement de chercher ce qui bloque.

Merci pour votre aide,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 18h45   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 018
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 018
Points : 5 081
Points : 5 081
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
	$str1 = 'LE MOTIF DU PROBLEME - NOM DE LA COMMUNE 1 RUE DE LA COMMUNE - VEHICULE 1';
	$str2 = 'LE MOTIF DU PROBLEME - NOM DE LA COMMUNE  RUE DE LA COMMUNE - VEHICULE 2';
 
	$concret = 'Percuté un Arbre - St Martin des Canards 23 Rue du marechal qui se gratte - Ma Tuture';
 
 
	$regex = '~\s*(?<motif>(\w|\s)+)\s*-\s{1,}(?<commune>(\w|\s)+)\s(?<numero>\d+)?\s(?<voie>(\w|\s)+)\s{1,}-\s*(?<vehicule>(\w|\s)+)\s*~';
 
	if( preg_match($regex, $concret, $matches) )
	{
		echo "Adresse : {$matches['numero']} {$matches['voie']} {$matches['commune']}<br />";
	}
 
	if( preg_match($regex, $str2, $matches) )
	{
		echo "Adresse : {$matches['voie']} {$matches['commune']}<br />";
	}
Les espaces ont intérêt à être aux bons endroits...
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/01/2012, 18h53   #6
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Oui, les espaces sont respectés, c'est généré par une machine de manière automatique.

Ça fonctionne parfaitement !

Je ne savais pas que l'on pouvait utiliser : $matches['numero'] au lieu de $matches[3] !

Merci !

ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 10h35   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 018
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 018
Points : 5 081
Points : 5 081
Tu peux à partir du moment ou tu utilises des sous masques nommés, c'est quand même beaucoup plus clair de cette façon.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 13h57   #8
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Bonjour Benjamin,

Oui!

Il faut que j'ameliore car parfois, j'ai une adresse qui comprend un numéro de la forme : "19/2".

Je vais essayer de trouver par moi même ce soir.

Cordialement,
ZiP
[ZiP] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 14h01   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 247
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 247
Points : 8 632
Points : 8 632
c'est vraiment important ? d’où viennent les données ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 14h11   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 018
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 3 018
Points : 5 081
Points : 5 081
Change les sous patterns \w par [a-zA-Z0-9/\-_] pour être plus permissif.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h06   #11
Membre actif
 
Homme
Inscription : octobre 2006
Messages : 664
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : octobre 2006
Messages : 664
Points : 197
Points : 197
Bonjour,

En fait, je l'ai modifiée comme ça :
Code :
~(?<motif>(.*))\s-\s(?<commune>(.*))\s(?<numero>(\d+\w?))?\s(?<voie>(.*))\s-\s(?<vehicule>(.*))~
Ensuite, j'ai voulu ajouter le "-" et le "/" pour le numéro :
Code :
~(?<motif>(.*))\s-\s(?<commune>(.*))\s(?<numero>(\d+\w?\-?/?))?\s(?<voie>(.*))\s-\s(?<vehicule>(.*))~
Mais là, ça n'est pas pris en compte...

Merci pour votre aide,
ZiP
[ZiP] 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 20h34.


 
 
 
 
Partenaires

Hébergement Web