2013-04-08 2 views
2

Я пытаюсь сделать регулярное выражение проверки подлинности GPA в Perl, и, похоже, у меня что-то не так с моей логикой. Вы должны иметь возможность закончить число 0-3, за которым следует a. с еще 1 цифрой в диапазоне от 0 до 9. или если первая цифра в 4 он должен следовать с +0,0 Вот мой код:Регулярное выражение GPA в Perl

$get_gpa_input =~ m/[0-3]\.\d[0-9]|[4].[0]/ 
+2

Что происходит, когда вы пытаетесь? –

ответ

1

Удалить [0-9]. У вас также есть дополнительные скобки, и вы должны уйти от десятичной дроби в «4.0».

$get_gpa_input =~ m/[0-3]\.\d|4\.0/ 
+1

'\ d' соответствует только' [0-9] ', если только'/a' не действует. –

+0

Правильно, хотя, скорее всего, это не проблема. –

+0

Что означает '\' после 4 и до .0? – 2013-04-08 00:24:52

0

Вы \d[0-9], который потребует две цифры следующие 0-3. Вы также не избегаете десятичного числа в 4 альтернативных, что может иметь значение.

[0-3]\.\d|4\.0 
1

Если вы делаете проверку, вы не хотите искать в строке, а заставить всю строку, чтобы соответствовать вашему регулярному выражению; Вы делаете это путем добавления якоря в начале и конце: только

/\A (?: [0-3]\.[0-9] | 4\.0) \z/x 

\A матчи перед первым символом строки, \z матчи только после последнего символа строки.

В большинстве случаев избегайте использования \d, так как оно может соответствовать любому числу «цифр цифр» Unicode, которые не имеют значения от 0 до 9 (хотя в новых perls флаг/ref возвращает его в старое значение ASCII).

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