Дан набор из 10 заданий. К каждому из них необходимо написать валидное Регулярное Выражение (Regular Expression) минимального
размера в формате C (текущей версии установленной на сервере SPOJ). Каждое выражение будет протестировано на специально составленном наборе данных, содержащем правильные и не правильные выражения.
Составленное вами выражение должно корректно отработать на всех тестах.
Задача 1
Написать регулярное выражение определяющее является ли данная строчка строкой "abcdefghijklmnopqrstuv18340" или нет.
Пример правильных выражений:
abcdefghijklmnopqrstuv18340 Пример неправильных выражений:
abcdefghijklmnoasdfasdpqrstuv18340
Задача 2
Написать регулярное выражение определяющее является ли данная строчка GUID с или без скобок. Где GUID это строчка, состоящая из 8, 4, 4, 4, 12 шестнадцатеричных цифр разделенных тире.
Пример неправильных выражений:
02fa0e4-01ad-090A-c130-0d05a0008ba0}
e02fd0e400fd090Aca300d00a0038ba0
Задача 3
Написать регулярное выражение определяющее является ли заданная строка правильным MAC-адресом.
Пример правильных выражений:
01:32:54:67:89:AB
aE:dC:cA:56:76:54
Пример неправильных выражений:
01:33:47:65:89:ab:cd
01:23:45:67:89:Az
Задача 4
Написать регулярное выражение определяющее является ли данная строчка валидным URL адресом. В данной задаче правильным URL считаются адреса http и https, явное указание протокола также может отсутствовать. Учитываются только адреса, состоящие из символов, т.е. IP адреса в качестве URL не присутствуют при проверке. Допускаются поддомены, указание порта доступа через двоеточие, GET запросы с передачей параметров, доступ к подпапкам на домене, допускается наличие якоря через решетку. Однобуквенные домены считаются запрещенными. Запрещены спецсимволы, например «-» в начале и конце имени домена. Запрещен символ «_» и пробел в имени домена. При составлении регулярного выражения ориентируйтесь на список правильных и неправильных выражений заданных ниже.
Пример правильных выражений:
http://www.zcontest.ru
http://zcontest.ru
http://zcontest.com
https://zcontest.ru
https://sub.zcontest-ru.com:8080
http://zcontest.ru/dir%201/dir_2/program.ext?var1=x&var2=my%20value
zcon.com/index.html#bookmark
Пример неправильных выражений:
Just Text.
http://a.com
http://www.domain-.com
Задача 5
Написать регулярное выражение определяющее является ли данная строчка шестнадцатиричным идентификатором цвета в HTML. Где #FFFFFF для белого, #000000 для черного, #FF0000 для красного и.т.д.
Пример правильных выражений:
#FFFFFF
#FF3421
#00ff00
Пример неправильных выражений:
232323
f#fddee
#fd2
Задача 6
Написать регулярное выражение определяющее является ли данная строчка датой в формате dd/mm/yyyy. Начиная с 1600 года до 9999 года
Пример правильных выражений:
29/02/2000
30/04/2003
01/01/2003
Пример неправильных выражений:
29/02/2001
30-04-2003
1/1/1899
Задача 7
Написать регулярное выражение определяющее является ли данная строчка валидным E-mail адресом согласно RFC под номером 2822
Пример правильных выражений:
mail@mail.ru
valid@megapochta.com
aa@aa.info
Пример неправильных выражений:
bug@@@com.ru
@val.ru
Just Text2
val@val
val@val.a.a.a.a
12323123@111[]][]
Задача 8
Составить регулярное выражение, является ли заданная строчка IP адресом, записанным в десятичном виде
Пример правильных выражений:
127.0.0.1
255.255.255.0
192.168.0.1
Пример неправильных выражений:
1300.6.7.8
abc.def.gha.bcd
254.hzf.bar.10
Задача 9
Проверить, надежно ли составлен пароль. Пароль считается надежным, если он состоит из 8 или более символов. Где символом может быть английская буква, цифра и знак подчеркивания. Пароль должен содержать хотя бы одну заглавную букву, одну маленькую букву и одну цифру.
Пример правильных выражений:
C00l_Pass
SupperPas1
Пример неправильных выражений:
Cool_pass
C00l
Задача 10
Проверить является ли заданная строка шестизначным числом, записанным в десятичной системе счисления без нулей в старших разрядах.
Пример правильных выражений:
123456
234567
Пример неправильных выражений:
1234567
12345
Для тестирования применяется следующая функция:
int match(const char *string, char *pattern)
{
int status;
regex_t re;
if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0) {
return(0);
}
status = regexec(&re, string, (size_t) 0, NULL, 0);
regfree(&re);
if (status != 0) {
return (0);
}
return (1);
}
Входные данные
В данной задаче нет входных данных
Выходные данные
Выведите ответ в виде 10 строчек, первая строчка соответствует первой задаче, вторая
второй и.т.д. Все остальные строчки игнорируются. Если вы не хотите решать какую то задачу,
на соответствующей строчке поставьте "---". В противном случае выведите текст регулярного
выражения для данной задачи. Если хотя бы одно из выражений окажется неверным, то вы получите
статус Wrong Answer.
Начисление очков
За каждую решенную задачу вы получите ровно 1 очко плюс бонусные баллы
равные 1/(размер регулярного выражения).