php
  • regex
  • 2010-02-16 2 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"; 
    } 
    

    илиПочему оба моих PHP regexp терпят неудачу?

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

    Кроме того, Expresso - отличный инструмент для написания, понимания и регулярных выражений TESTING – CaffGeek

    ответ

    5

    Символ класса […] делает только описывают один одиночный символ. Таким образом, [a-zA-Z] описывает один символ из a - z, A - Z. То же самое относится к \w (это также класс символов).

    Вы забыли описать количество может появиться персонажи из того, что классы персонажей, как:

    • ?: ноль или один повторении
    • *: ноль или более повторений
    • +: одно или несколько повторений
    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)+$/'; вы пропустили квантор, это должно быть [a-zA-Z]+ или [a-zA-Z]*.

    Попробуйте http://www.regexp.net/, чтобы быстро оптимизировать ваше регулярное выражение.

    0

    Вы можете сделать что-либо:

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

    или

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

    В обоих случаях, вы забыли «+» перед буквами, которые соответствуют «Спринт», во втором случае, вы забыли число соответствует «1».

    И, кстати, вам не нужно «+» в конце рисунка и() вокруг csv.

    Но, пожалуйста, приложите усилия, чтобы написать полный вопрос. Проводка только такого кода не очень удобна для понимания.

    Наконец, если вы хотите протестировать регулярное выражение, используйте good tool.

     Смежные вопросы

    • Нет связанных вопросов^_^