使用 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

前面的橫幅文字不需要處理。 Expect 將等待,直到滿足其中一個條件(例如匹配字串/正規表示式或逾時)。先前的文字會被緩衝以供以後使用,但不是匹配的一部分。您需要處理的是尋找提示字串:local-login [/home/user]%。如果您很清楚它可能會是什麼樣子(例如,總是有“[”目錄“]%”,那麼您可以編寫一個正規表示式來匹配它:

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

確保正規表示式中沒有換行符/回車符,因為輸出不會有換行符/回車符。

答案2

我不認為你能夠使用正規表示式來匹配期待J它似乎就像他們依靠String.indexOf尋找匹配

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

pattern所提供的預期字串在哪裡。

因此,請嘗試匹配子字串,看看是否效果更好。

相關內容