игра брюс 2048
Главная / Программирование / Регулярные выражения Perl и их применение / Тест 4

Регулярные выражения Perl и их применение - тест 4

Упражнение 1:
Номер 1
Нужно захватить из текста в переменную $1 IP-адрес примерно такого формата: 192.64.235.45. Какой оператор делает это правильно?

Ответ:

 (1) /(\d+.\d+.\d+.\d+)/ 

 (2) /(\d+.){4}/ 

 (3) /(\d+.{4})/ 

 (4) /((\d+|\.)+)/ 

 (5) /([\d.]+)/ 


Номер 2
Нужно захватить в $1 и $2 первые два целых числа из текста, которые там имеются. Какие операторы делают это правильно?

Ответ:

 (1) /(\d+)(\d+)/ 

 (2) /(\d+).+(\d+)/ 

 (3) /(\d+).*(\d+)/s 

 (4) /(\d+)\D+(\d+)/ 

 (5) /\b(\d+)\D+(\d+)\b/ 

 (6) /(\d+?)\D+(\d+)/ 


Номер 3
Нужно из текста $_='2007/3/15' захватить год, месяц и день, соответственно, в $year, $month и $day. В каких вариантах это делается верно?

Ответ:

 (1) /(\d+)/; m!\d+/(\d+)!; m!\d+/\d+/(\d+)!; my($year,$month,$day)=($1,$2,$3); 

 (2) my($year,$month,$day)=m!(\d+)/(\d+)/(\d+)!g 

 (3) my($year,$month,$day)=m!(\d+)/(\d+)/(\d+)! 


Упражнение 2:
Номер 1
Нужно из текста в $_ захватить в массив @a все слова, которые состоят только из латинских букв и не содержат букву h независимо от регистра. В каких вариантах это делается верно?

Ответ:

 (1) my @a=/\b[a-gi-z]+\b/g 

 (2) my @a=/[a-gi-zA-IG-Z]+/g  

 (3) my @a=/[a-gi-z]+/gi 

 (4) my @a=/[A-GI-Z]+/gi 

 (5) my @a=/(?i)\b[A-GI-Z]+\b/g 


Номер 2
Нужно из текста в $_ захватить в массив @a все слова, которые состоят только из латинских букв и содержат букву h независимо от регистра. В каких вариантах это делается верно?

Ответ:

 (1) my @a=/\b[a-z]+h[a-z]+\b/gi 

 (2) my @a=/[a-zA-Z]+h[a-zA-Z]+/g  

 (3) my @a=/[a-z]+h[a-z]+/gi 

 (4) my @a=/[A-Z]*h[A-Z]*/gi 

 (5) my @a=/\b[A-Za-z]*[hH][A-Za-z]*\b/g 


Номер 3
Нужно из текста в $_ захватить в массив @a все слова, состоящие только из латинских букв и содержащие единственную букву h, которая не стоит с краю, независимо от регистра. В каких вариантах это делается верно?

Ответ:

 (1) my @a=/\b[a-gi-z]+h[a-gi-z]+\b/gi 

 (2) my @a=/[a-gi-zA-GI-Z]+h[a-gi-zA-GI-Z]+/g  

 (3) my @a=/[a-gi-z]+h[a-gi-z]+/gi 

 (4) my @a=/[A-GI-Z]+h[A-GI-Z]+/gi 

 (5) my @a=/\b[A-GI-Za-gi-z]+[hH][A-GI-Za-gi-z]+\b/g  


Упражнение 3:
Номер 1
В данном тексте в каждом слове надо от повторяющихся подряд латинских символов оставить ровно один из них, остальное оставить без изменения. Какие операторы делают это правильно?

Ответ:

 (1) s/(.)\1+/$1/g 

 (2) s/(\w)\1/$1/g 

 (3) s/(\w+)\1/$1/g 

 (4) s/(\w)\1+/$1/gi 

 (5) s/(\w)\1+/$1/g 

 (6) s/(\w+)\1/$1/gi 


Номер 2
Надо у каждого слова в тексте удалить последний символ. Какие операторы делают это правильно?

Ответ:

 (1) s/\w*?\b//g 

 (2) s/\w+?\b//g 

 (3) s/(\w)\b/$1/g 

 (4) s/(\w+)\w/$1/g 

 (5) s/(\w*)\w/$1/g 

 (6) s/\w\b//g  


Номер 3
Надо у каждого слова в тексте удалить первый символ. Какие операторы делают это правильно?

Ответ:

 (1) s/\b\w//g 

 (2) s/\b\w+?//g 

 (3) s/\w(\w+)\b/$1/g 

 (4) s/\w*(\w+)/$1/g 

 (5) s/\w(\w*)/$1/g 


Упражнение 4:
Номер 1
В тексте надо заменить все прописные латинские буквы соответствующими строчными. Какие операторы делают это правильно?

Ответ:

 (1) s/\w+/lc $1/ge 

 (2) s/(\w)/$1/gei 

 (3) s/([A-Z])/$1/gei 

 (4) s/([A-Z])/lc $1/g 

 (5) s/([A-Z])/lc $1/ge 

 (6) s/(\w)/lc $1/ge 


Номер 2
В тексте надо заменить все строчные латинские буквы соответствующими прописными. Какие операторы делают это правильно?

Ответ:

 (1) s/\w+/uc $1/ge 

 (2) s/(\w)/$1/gei 

 (3) s/([a-z])/$1/gei 

 (4) s/([a-z])/uc $1/g 

 (5) s/([a-z])/uc $1/ge 

 (6) s/(\w)/uc $1/ge 


Номер 3
В тексте надо все цифры увеличить на 1, а 9 заменить на 0. Какие операторы делают это правильно?

Ответ:

 (1) s/(\d)/++$1/ge 

 (2) s/(\d)/my $a=''.$1; ++$a/ge 

 (3) s/(\d)/$1 < 9 ? $1+1 : 0/ge 

 (4) s/(\d+)/$1 < 9 ? $1+1 : 0/ge 

 (5) s/(\d*)/$1 < 9 ? $1+1 : 0/ge 

 (6) s/(\d)/($1+1)%10/ge  


Упражнение 5:
Номер 1
В тексте есть число, которое может быть целым, а может иметь точку (в этом случае обязательна дробная часть). Число может стоять в конце предложения, и поэтому за ним может быть точка. Предполагаем, что в тексте нет таких конструкций, как дата 2006.12.26, которую можно было бы спутать с дробным числом. Примеры чисел: +1, -2.5, -.010.  Надо захватить в $1 первое такое число. Какие операторы делают это правильно?

Ответ:

 (1) /([+-]?(?:\d+(?:\.\d+)?)/ 

 (2) /([+-]?(\d+(\.\d+)?|\.\d+))/ 

 (3) /([+-]?(?:\d+(?:\.\d+)?|\.\d+))/ 

 (4) /([+-]?(\d*\.*\d*)/ 

 (5) /([+-]?(\d*\.*\d+)/ 

 (6) /(?:[+-]?(\d*\.*\d*)/ 


Номер 2
В тексте есть телефонный номер. Примеры номеров: +7 495 9569214, (834-35)4-34-35, 3-45-56. Надо захватить в $1 этот номер. Какие операторы делают это правильно?

Ответ:

 (1) /(\+?[\d (-)]+\d)/ 

 (2) /(\+?[\d ()-]+)/ 

 (3) /(\+?[\d ()-]+\d)/ 

 (4) /(+?[\d ()-]+\d)/ 

 (5) /(\+?[\d ()-]+\d*)/ 

 (6) /(\+?[-\d ()]+\d)/ 


Номер 3
В тексте по ошибке автора встречаются удвоения слов, например: "I write write a letter". Это надо исправить, чтобы получилось "I write a letter". Какие операторы делают это правильно?

Ответ:

 (1) s/\b(\w+)\s+\1\b/$1/gi 

 (2) s/\b(\w+)\s+\1\b/$1/g 

 (3) s/\b(\w+)\s+\1\b/$1/i 

 (4) s/\b(\w+)(\s+)\1\b/$1$2/gi 

 (5) s/\b((\w+)\s+)\2\b/$1/gi 

 (6) s/\b((\w+)\s+)\1\b/$1/gi 


Упражнение 6:
Номер 1
Какое значение получит массив @a в результате работы программы my @a="abc\n123" =~ /\w+/g?

Ответ:

 (1) (abc) 

 (2) () или пусто 

 (3) (abc, 123) 


Номер 3
Какое значение получит массив @a в результате работы программы my @a="abc\n123" =~ /\w/g?

Ответ:

 (1) (a) 

 (2) () или пусто 

 (3) (a, b, c, 1, 2, 3) 




Главная / Программирование / Регулярные выражения Perl и их применение / Тест 4