ExpectJ를 사용한 정규식

ExpectJ를 사용한 정규식

저는 ExpectJ Java 라이브러리를 사용하여 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

이전 배너 텍스트는 처리할 필요가 없습니다. 문자열/정규식 일치 또는 시간 초과와 같은 조건 중 하나가 충족될 때까지 기다립니다. 이전 텍스트는 나중에 사용하기 위해 버퍼링되지만 일치 항목의 일부는 아닙니다. 당신이 처리해야 할 것은 프롬프트 문자열을 찾는 것입니다: local-login [/home/user]%. 어떤 모양일지 잘 알고 있다면(예를 들어 항상 "["directory"]%"가 있는 경우) 그에 맞는 정규식을 작성할 수 있습니다.

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

출력에는 개행/캐리지 리턴 문자가 없으므로 정규식에 개행/캐리지 리턴 문자가 없는지 확인하십시오.

답변2

정규식을 사용하여 일치시킬 수 없다고 생각합니다.J를 기대한다. 것 같다String.indexOf마치 성냥을 찾는 데 의존하는 것처럼

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

pattern예상 문자열은 어디에 제공됩니까?

따라서 하위 문자열을 일치시켜 보고 그것이 더 잘 작동하는지 확인하십시오.

관련 정보