IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

And en expression reguliere [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 90
    Points
    90
    Par défaut And en expression reguliere
    Salut tout le monde,

    Je ne m y connais pas en Expression reguliere. quelqu'un pourrait m'aider. Je voudrais trouver dans un Text: luft "and" fracht c-a-d dans un Text où il ya luft et fracht.

    Exemple de Text: luft Expand to see a description of the current regular expression. Right-click a node to edit the expression fracht.

    je devrais trouver les deux mots.

    Comment je fais? merci pour les reponses

  2. #2
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Si tu n'as besoin que de la forme de la regex (et pas du code PHP), tu pourrais essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^.*(luft)?.*(fracht)?.*$
    Voici le détail :
    ^ : début de la phrase
    .* : n'importe quoi
    (luft)? : 0 ou 1 fois "luft"
    .* : n'importe quoi
    (fracht)? : 0 ou 1 fois "fracht"
    .* : n'importe quoi
    $ : fin de la phrase

  3. #3
    Invité
    Invité(e)
    Par défaut


    Attention, la solution de wazokivol ne fonctionne que si tes 2 mots sont toujours dans le même ordre dans ta phrase... Je suis en train de chercher (ça m'entraîne aux RegEx), je te dis quand j'ai trouvé un truc...

  4. #4
    Invité
    Invité(e)
    Par défaut
    En fait il suffit de faire un OU entre les 2 possibilités :
    (luft puis fracht) OU (fracht puis luft)

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $texts = array(
    	'luft and fracht'	=> '',
    	'fracht and luft'	=> '',
    	'luft and luft'		=> '',
    	'luft and plouf'	=> '',
    	'plouf'			=> '',
    );
    foreach($texts as $text=>&$result) {
    	$result = preg_match('`(fracht.*luft)|(luft.*fracht)`', $text, $matches);
    }
    die('<pre>'.print_r($texts, TRUE).'</pre>');

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    il faut mettre la limite de mot \b, sinon si un mot contient la chaine il sera matcher

    je te déconseille d’utiliser l'opérateur d’exécution comme delimiter

  6. #6
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par torvalds17 Voir le message
    En fait il suffit de faire un OU entre les 2 possibilités :
    (luft puis fracht) OU (fracht puis luft)

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $texts = array(
    	'luft and fracht'	=> '',
    	'fracht and luft'	=> '',
    	'luft and luft'		=> '',
    	'luft and plouf'	=> '',
    	'plouf'			=> '',
    );
    foreach($texts as $text=>&$result) {
    	$result = preg_match('`(fracht.*luft)|(luft.*fracht)`', $text, $matches);
    }
    die('<pre>'.print_r($texts, TRUE).'</pre>');
    Merci beaucoups pour vos contributions. la solution propose par @torvalds17 fonctionne mais mon probleme devient malheureusement complexe: si je me retrouve avec "luft and fracht and sicherheit and ...." il me faut faire une permutation entre les mots pour obtenir les expressions regulieres.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mourbare Voir le message
    si je me retrouve avec "luft and fracht and sicherheit and ...." il me faut faire une permutation entre les mots pour obtenir les expressions regulieres.
    Hello,
    je me suis justement intéressé à la question pas plus tard que ... maintenant (en lisant ce post !)
    (les regex ne sont pas mon fort, c'est donc une bonne occasion de s'y mettre !)

    J'ai trouvé une solution (qui n'est peut-être pas la meilleur, mais qui semble fonctionner) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <html>
    <head>
    </head>
    <body>
    <?php
    // array des mots a rechercher
    $lesmotsrecherches = array(
    	'luft',
    	'bla',
    	'fracht'
    );
     
    // array "test"
    $texts = array(
    	'luft - fracht'	=> '',
    	'luft - plouf - fracht'	=> '',
    	'fracht - luft - luft'	=> '',
    	'luft - luft'		=> '',
    	'luft - plouf'	=> '',
    	'luft - blabla - fracht'	=> '',
    	'luft - bla - fracht'	=> '',
    	'luft - fracht - bla'	=> '',
    	'luft - plouf - bla'	=> '',
    	'fracht - bla - fracht - luft'	=> '',
    	'plouf'			=> '',
    );
    ?>
     
    <p>recherche TOUS les mots :</p>
    <?php
    foreach($texts as $text=>&$result) {
     
    	// recherche TOUS les mots : 
    	// si tous bons, on obtient 1  : (1 * 1 * 1 * 1 * ...) = 1
    	// si au moins un est mauvais, on obtient 0  : (1 * 0 * 1 * 1 * ...) = 0
    	$result = 1;
    	foreach($lesmotsrecherches as $lemot) {
    		$result *= preg_match('/^.*\b'.$lemot.'\b.*/', $text, $matches);
    	}
     
    }
    echo('<pre>'.print_r($texts, TRUE).'</pre>');
    ?>
     
    <p>recherche AU MOINS UN des mots :</p>
    <?php
    foreach($texts as $text=>&$result2) {
     
    	// recherche AU MOINS UN des mots :
    	$result2 = 0;
    	foreach($lesmotsrecherches as $lemot) {
    		$result2 += preg_match('/^.*\b'.$lemot.'\b.*/', $text, $matches);
    		$result2 = ($result2>0)? 1 : 0;
    	}
     
    }
    echo('<pre>'.print_r($texts, TRUE).'</pre>');
    ?>
    </body>
    </html>
    On obtient (apparemment) les bons résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    recherche TOUS les mots :
     
    Array
    (
        [luft - fracht] => 0
        [luft - plouf - fracht] => 0
        [fracht - luft - luft] => 0
        [luft - luft] => 0
        [luft - plouf] => 0
        [luft - blabla - fracht] => 0
        [luft - bla - fracht] => 1
        [luft - fracht - bla] => 1
        [luft - plouf - bla] => 0
        [fracht - bla - fracht - luft] => 1
        [plouf] => 0
    )
     
    recherche AU MOINS UN des mots :
     
    Array
    (
        [luft - fracht] => 1
        [luft - plouf - fracht] => 1
        [fracht - luft - luft] => 1
        [luft - luft] => 1
        [luft - plouf] => 1
        [luft - blabla - fracht] => 1
        [luft - bla - fracht] => 1
        [luft - fracht - bla] => 1
        [luft - plouf - bla] => 1
        [fracht - bla - fracht - luft] => 1
        [plouf] => 0
    )
    Dernière modification par Invité ; 03/08/2011 à 18h46.

  8. #8
    Membre régulier
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 128
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Hello,
    je me suis justement intéressé à la question pas plus tard que ... maintenant (en lisant ce post !)
    (les regex ne sont pas mon fort, c'est donc une bonne occasion de s'y mettre !)

    J'ai trouvé une solution (qui n'est peut-être pas la meilleur, mais qui semble fonctionner) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <html>
    <head>
    </head>
    <body>
    <?php
    // array des mots a rechercher
    $lesmotsrecherches = array(
    	'luft',
    	'bla',
    	'fracht'
    );
     
    // array "test"
    $texts = array(
    	'luft - fracht'	=> '',
    	'luft - plouf - fracht'	=> '',
    	'fracht - luft - luft'	=> '',
    	'luft - luft'		=> '',
    	'luft - plouf'	=> '',
    	'luft - blabla - fracht'	=> '',
    	'luft - bla - fracht'	=> '',
    	'luft - fracht - bla'	=> '',
    	'luft - plouf - bla'	=> '',
    	'fracht - bla - fracht - luft'	=> '',
    	'plouf'			=> '',
    );
    ?>
     
    <p>recherche TOUS les mots :</p>
    <?php
    foreach($texts as $text=>&$result) {
     
    	// recherche TOUS les mots : 
    	// si tous bons, on obtient 1  : (1 * 1 * 1 * 1 * ...) = 1
    	// si au moins un est mauvais, on obtient 0  : (1 * 0 * 1 * 1 * ...) = 0
    	$result = 1;
    	foreach($lesmotsrecherches as $lemot) {
    		$result *= preg_match('/^.*\b'.$lemot.'\b.*/', $text, $matches);
    	}
     
    }
    echo('<pre>'.print_r($texts, TRUE).'</pre>');
    ?>
     
    <p>recherche AU MOINS UN des mots :</p>
    <?php
    foreach($texts as $text=>&$result2) {
     
    	// recherche AU MOINS UN des mots :
    	$result2 = 0;
    	foreach($lesmotsrecherches as $lemot) {
    		$result2 += preg_match('/^.*\b'.$lemot.'\b.*/', $text, $matches);
    		$result2 = ($result2>0)? 1 : 0;
    	}
     
    }
    echo('<pre>'.print_r($texts, TRUE).'</pre>');
    ?>
    </body>
    </html>
    On obtient (apparemment) les bons résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    26
    27
    28
    29
    30
    31
    32
    33
    recherche TOUS les mots :
     
    Array
    (
        [luft - fracht] => 0
        [luft - plouf - fracht] => 0
        [fracht - luft - luft] => 0
        [luft - luft] => 0
        [luft - plouf] => 0
        [luft - blabla - fracht] => 0
        [luft - bla - fracht] => 1
        [luft - fracht - bla] => 1
        [luft - plouf - bla] => 0
        [fracht - bla - fracht - luft] => 1
        [plouf] => 0
    )
     
    recherche AU MOINS UN des mots :
     
    Array
    (
        [luft - fracht] => 1
        [luft - plouf - fracht] => 1
        [fracht - luft - luft] => 1
        [luft - luft] => 1
        [luft - plouf] => 1
        [luft - blabla - fracht] => 1
        [luft - bla - fracht] => 1
        [luft - fracht - bla] => 1
        [luft - plouf - bla] => 1
        [fracht - bla - fracht - luft] => 1
        [plouf] => 0
    )
    Merci beaucoups pour ce coups de main genial.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 15h24
  2. [langage] [debutant] expression reguliere
    Par toto_titi dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2003, 10h45
  3. Réponses: 2
    Dernier message: 16/06/2003, 16h15
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 18h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo