Почему оба моих PHP регулярных выражения терпят неудачу? - PullRequest
1 голос
/ 16 февраля 2010
$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 ]

5 голосов
/ 16 февраля 2010

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

Вы забыли описать количество символов из этих классов символов, например:

  • ?: ноль или одно повторение
  • *: ноль или более повторений
  • +: одно или несколько повторений
1 голос
/ 16 февраля 2010

'/^[a-zA-Z]\-[0-9]\.(csv)+$/'; вам не хватает квантификатора, это должно быть [a-zA-Z]+ или [a-zA-Z]*.

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

0 голосов
/ 17 февраля 2010

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

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.

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

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

0 голосов
/ 16 февраля 2010
<?
$subject = "SPRINT-1.csv";
$pattern = '/^[a-zA-Z]*\-[0-9]\.csv?$/';
if(preg_match($pattern, $subject)) {
 echo "Match";
} else {
 echo "NOPE";
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...