Регулярные выражения с ExpectJ

Регулярные выражения с ExpectJ

Я использовал библиотеку Java ExpectJ для автоматизации некоторых заданий на сервере Linux, однако теперь мне нужно автоматизировать задание, которое отправляет разный текстовый ответ для каждого выполнения. Вот вывод:

Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012 
********************************************************************************

********************************************************************************
[YOU HAVE NEW MAIL] 
local-login [/home/user]%

А в моем коде есть следующее:

s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");

Я получил показанный вывод, но не смог отправить следующую команду, потому что не знаю, как прочитать последний ответ. Я попытался использовать регулярное выражение, но оно не работает.

решение1

Предшествующий текст баннера не нужно обрабатывать. Expect будет ждать, пока не будет выполнено одно из условий (например, совпадение со строкой/регулярным выражением или истечение времени ожидания). Текст перед ним буферизуется для возможного использования в будущем, но не является частью совпадения. Вам нужно обработать поиск строки приглашения: local-login [/home/user]%. Если у вас есть хорошее представление о том, как это может выглядеть (например, всегда будет иметь '[' каталог ']%'), то вы можете написать регулярное выражение для сопоставления с этим:

.*\[(/[^/]+)+\]%

Убедитесь, что в регулярном выражении нет символов новой строки/возврата каретки, поскольку в выходных данных их не будет.

решение2

Я не думаю, что вы можете использовать регулярные выражения для сопоставленияОжидатьJ. Кажетсякак будто они рассчитывают String.indexOfнайти совпадение

if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)

где patternуказана ожидаемая строка.

Поэтому попробуйте вместо этого выполнить сопоставление по подстроке и посмотрите, сработает ли это лучше.

Связанный контент