Expressões regulares com ExpectJ

Expressões regulares com ExpectJ

Tenho utilizado a biblioteca ExpectJ Java para automatizar alguns jobs em um servidor Linux, porém agora preciso automatizar um job que envie uma resposta de texto diferente para cada execução. Aqui está a saída:

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

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

E no meu código tenho o seguinte:

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

Recebo a saída mostrada, mas não consegui enviar o próximo comando porque não sei como ler a última resposta, tentei usar uma expressão regular mas não funcionou.

Responder1

O texto do banner anterior não precisa ser tratado. Expect irá esperar até que uma das condições seja atendida (como combinar uma string/regexp ou expirar). O texto anterior é armazenado em buffer para possível uso posterior, mas não faz parte da correspondência. O que você precisa fazer é procurar a string de prompt: local-login [/home/user]%. Se você tiver uma boa ideia de como será (por exemplo, sempre terá '[' diretório ']%', então você pode escrever uma expressão regular para corresponder a isso:

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

Certifique-se de não ter uma nova linha/retorno de carro na expressão regular, pois a saída não terá um.

Responder2

Eu não acho que você seja capaz de usar expressões regulares para combinarEspereJ. Parececomo se eles estivessem contando String.indexOfpara encontrar a correspondência

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

onde patternestá a String fornecida a ser esperada.

Então tente combinar uma substring e veja se funciona melhor.

informação relacionada