Оператор Perl m // необъяснимым образом не может найти совпадение с простым регулярным выражением - PullRequest
3 голосов
/ 07 февраля 2011

Сегодня, когда я писал регулярное выражение для совпадения с выводом приглашения и взаимодействовал с программой через IPC :: RUN, я натолкнулся на необъяснимую ошибку при сопоставлении простого регулярного выражения.это может быть проблема интерполяции «@» как сигилы, но

$ perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*\@.*> /s'
$

Это так просто, что я не могу понять, в чем проблема.

* 10085.10.1 на Ubuntu 10.4

Есть идеи?

Заранее спасибо

Ответы [ 3 ]

7 голосов
/ 07 февраля 2011

Я думаю, что вы на правильном пути, но смотрите на интерполяцию в неправильном месте.

Рассмотрите, что происходит с @ в вашей строке, а не с регулярным выражением.

4 голосов
/ 07 февраля 2011

Вам нужно экранировать символ @ в строке для сопоставления или использовать одинарные кавычки - это неудобно для оболочки. Кроме того, у вас было дополнительное место в конце вашего регулярного выражения.

perl -E 'say "OK" if "mbox user@testdomain.it> " =~ /mbox\s+.*@.*> /s'  # Yours
perl -E 'say "OK" if "mbox user\@testdomain.it> " =~ /mbox\s+.*@.*>/s'  # Working
3 голосов
/ 07 февраля 2011

Попробуйте это (добавив лишний \ перед @ в вашей строке):

$ perl -E 'say "OK" if "mbox user\@testdomain.it> " =~ /mbox\s+.*\@.*> /s'
...