Reguläre Ausdrücke mit ExpectJ

Reguläre Ausdrücke mit ExpectJ

Ich habe die Java-Bibliothek ExpectJ verwendet, um einige Jobs auf einem Linux-Server zu automatisieren. Jetzt muss ich jedoch einen Job automatisieren, der bei jeder Ausführung eine andere Textantwort sendet. Hier ist die Ausgabe:

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

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

Und in meinem Code habe ich Folgendes:

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

Ich erhalte die angezeigte Ausgabe, konnte den nächsten Befehl jedoch nicht senden, da ich nicht weiß, wie ich die letzte Antwort lesen kann. Ich habe versucht, einen regulären Ausdruck zu verwenden, aber das funktioniert nicht.

Antwort1

Der vorhergehende Bannertext muss nicht behandelt werden. Expect wartet, bis eine der Bedingungen erfüllt ist (z. B. Übereinstimmung mit einem String/Regexp oder Zeitüberschreitung). Der Text davor wird für eine mögliche spätere Verwendung zwischengespeichert, ist aber nicht Teil der Übereinstimmung. Was Sie behandeln müssen, ist die Suche nach dem Eingabeaufforderungsstring: local-login [/home/user]%. Wenn Sie eine gute Vorstellung davon haben, wie dieser aussehen könnte (z. B. wird immer „[“ Verzeichnis „]%“ enthalten), können Sie einen regulären Ausdruck schreiben, der damit übereinstimmt:

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

Stellen Sie sicher, dass der reguläre Ausdruck keine Zeilenumbrüche/Wagenrückläufe enthält, da die Ausgabe sonst keine enthält.

Antwort2

Ich glaube nicht, dass Sie reguläre Ausdrücke verwenden können, um Übereinstimmungen zu finden inErwarteJ. Es scheintwie sie sich darauf verlassen, String.indexOfdas passende Gegenstück zu finden

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

wobei patternder zu erwartende bereitgestellte String ist.

Versuchen Sie stattdessen, eine Übereinstimmung mit einer Teilzeichenfolge zu finden, und prüfen Sie, ob es besser funktioniert.

verwandte Informationen