为什么我的两个PHP正则表达式都失败了?

时间:2010-02-16 20:53:31

标签: php regex

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

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

4 个答案:

答案 0 :(得分:5)

字符类[…]仅描述一个字符。因此,[a-zA-Z]描述了a - zA - Z中的一个字符。这同样适用于\w(也是一个字符类)。

您忘记描述可能出现的字符类中的字符数量,例如:

  • ? :零次或一次重复
  • * :零次或多次重复
  • + :一次或多次重复

答案 1 :(得分:1)

'/^[a-zA-Z]\-[0-9]\.(csv)+$/';您错过了量词,它应该是[a-zA-Z]+[a-zA-Z]*

尝试http://www.regexp.net/以快速优化正则表达式。

答案 2 :(得分:0)

<?
$subject = "SPRINT-1.csv";
$pattern = '/^[a-zA-Z]*\-[0-9]\.csv?$/';
if(preg_match($pattern, $subject)) {
 echo "Match";
} else {
 echo "NOPE";
}
?>

答案 3 :(得分: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);

在这两种情况下,你忘记了匹配“SPRINT”的字母前面的“+”,在第二种情况下,你忘记了匹配“1”的数字。

顺便说一句,你不需要模式结尾处的“+”,也不需要csv周围的()。

但是,请努力写一个完整的问题。发布这样的代码并不是很容易理解。

最后,如果要测试正则表达式,请使用good tool