php
  • regex
  • 2010-02-16 4 views 1 likes 
    1
    $subject = "SPRINT-1.csv"; 
    $pattern = '/^[a-zA-Z]\-[0-9]\.(csv)+$/'; 
    if(preg_match($pattern, $subject)) { 
    echo "Match"; 
    } else { 
    echo "NOPE"; 
    } 
    

    ouPourquoi les deux regexp PHP échouent?

    $subject = "SPRINT-1.csv"; 
    $pattern = '/^\w\-\.(csv)+$/'; 
    if(preg_match($pattern, $subject)) { 
    echo "Match"; 
    } else { 
    echo "NOPE"; 
    } 
    
    +0

    En outre, Expresso est un excellent outil pour écrire, comprendre et tester des regex – CaffGeek

    Répondre

    5

    Une classe de caractères […] ne décrit qu'un seul caractère. Ainsi, [a-zA-Z] décrit un caractère parmi a - z, A - Z. La même chose s'applique à \w (c'est aussi une classe de caractères).

    Vous avez oublié de décrire la quantité des caractères de que les classes de caractères peuvent apparaître, comme:

    • ?: zéro ou une répétition
    • *: zéro répétitions ou plus
    • +: une ou plusieurs répétitions
    0
    <? 
    $subject = "SPRINT-1.csv"; 
    $pattern = '/^[a-zA-Z]*\-[0-9]\.csv?$/'; 
    if(preg_match($pattern, $subject)) { 
    echo "Match"; 
    } else { 
    echo "NOPE"; 
    } 
    ?> 
    
    1

    '/^[a-zA-Z]\-[0-9]\.(csv)+$/'; vous manque le quantificateur, il devrait être [a-zA-Z]+ ou [a-zA-Z]*. Essayez http://www.regexp.net/ pour optimiser rapidement votre expression rationnelle.

    0

    Vous pouvez le faire soit:

    preg_match_all('/^[a-zA-Z]+\-[0-9]\.csv$/i', 'SPRINT-1.csv', $result); 
    

    ou

    preg_match_all('/^\w+\-\d\.csv+$/i', 'SPRINT-1.csv', $result); 
    

    Dans les deux cas, vous avez oublié le "+" avant les lettres qui correspondent à "SPRINT", dans le second cas, vous avez oublié le nombre correspondant à "1".

    Et en passant, vous n'avez pas besoin du "+" à la fin du modèle, ni du() autour du csv. Mais, s'il-vous-plaît, faites un effort pour écrire une question complète. Publier juste du code comme ça n'est pas vraiment pratique à comprendre.

    Enfin, si vous souhaitez tester regexp, utilisez un good tool.

    Questions connexes