php
  • regex
  • 2010-02-16 36 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正则表达式都失败?

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

    另外,Expresso是写作,理解和测试正则表达式的好工具 – 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的()。

    但请尽量写一个完整的问题。发布这样的代码并不是很方便理解。

    最后,如果要测试regexp,请使用good tool

    相关问题