melco
Зарегистрирован: 14.05.2006 Сообщения: 3
|
Добавлено: Вс Май 14 2006 17:35 Заголовок сообщения: [perl] Задание из "Learning perl" по регулярным выражениям |
|
|
Привет всем.
Я сейчас изучаю perl по книге "Learning perl" из O'Reilly bookshelf в "Главе 7, Регулярные выражения" упражнение 1.e вызвало у меня трудности:
1. Construct a regular expression that matches:
.................
e. the same word written two or more times in a row (with possibly varying intervening whitespace), where "word" is defined as a nonempty sequence of nonwhitespace characters
Не найдя ответа, я посмотрел в ответы, и там было следующее регулярное выражение, на основе которого я написал простенькую программу:
Код: |
#!/usr/bin/perl -w
print "Enter five same words: ";
if (<STDIN> =~/(^|\s)(\S+)(\s+\2)+(\s|$)/)
{print "Yes\n";} else {print "No\n";}
|
Но когда я ввожу:
+ ++ + + +
или
a aa a a a
прога отвечает "Yes" когда дожна "No" т.к. "++" и "+" это не одно и то же, ровно как "а" не то же, что "аа".
Я так понимаю "(^|\s)" это 0 или 1 "пробельный" символ в начале строки. "(\S+)(\s+\2)+" 2 или более одинаковых "слова" и "(\s|$)/" это "пробельный" символ в конце или просто конец строки.
И того, почему оно отвечает "Yes"? И каким будет правильное регулярное выражение, чтобы проверить строку на наличие 2 или более одинаковых слов с возможно разными "пробельными" символами между ними? |
|