저는 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
예상 문자열은 어디에 제공됩니까?
따라서 하위 문자열을 일치시켜 보고 그것이 더 잘 작동하는지 확인하십시오.