Регулярные выражения с 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"); 

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

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

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

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

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

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

где pattern – это ожидаемая строка String.

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