私は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
期待される文字列はどこに提供されますか?
したがって、部分文字列を一致させて、それがうまく機能していることを確認してください。