PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reg expression unter expect?



netlinker
26-01-2006, 19:04
Hallo,

ich habe mal eine Frage zu reg expressions unter expect.

Ich bekomme vom Spaen den String "a1-d042-e1f50M-E1dat#" und möchte jetzt auf alle alpha. num Zeichen plus - und _ matchen. Also hier auf alles ausser die "#".

Ich nutze folgendes Kommandos, bekomme aber als Rückgabe unterschiedliche Werte und nicht den gesammten String den ich möchte (ohne was zu ändern?):
z.B:
a1a1-d042-e1f50M
a1-d042
a1-d042-e1

expect {
-re "(\[A-Za-z0-9_-\]+)" { set old_id $expect_out(0,string) } }
send "$old_id\r"


Was mache ich den hier falsch??
Wäre super, wenn ihr einen Tip hättet.

MfG
Björn

samsara
27-01-2006, 07:23
Das waere schonmal passender, glaube ich:

-re "([A-Za-z0-9_-]+)"

Samsara
.

netlinker
27-01-2006, 13:43
Hi Samsara,

schon mal danke für den Tip.

Aber ohne die "\" bricht expect ab.

1234567890-1234-1234#
1234567invalid command name "A-Za-z0-9_-"
while executing
"A-Za-z0-9_-"
invoked from within
"expect {
-i $main_telnet -re "([A-Za-z0-9_-]+)" { set old_id $expect_out(0,string) } }"
(file "exp.exp" line 65)


Aber wenn ich expect im debug-Modus laufen lasse, sehe ich das die "\" nicht zur reg expression gehört:
does "\r\n123456789" (spawn_id exp_spawn0) match regular expression "([A-Za-z0-9-_]+)"? yes
expect: set expect_out(0,string) "123456789"
expect: set expect_out(1,string) "123456789"
expect: set expect_out(spawn_id) "exp_spawn0"
expect: set expect_out(buffer) "\r\n123456789"
send: sending "!Alte ID ist:123456789\r" to { exp_spawn0 }

expect: does "" (spawn_id exp_spawn0) match glob pattern "#"? no

expect: does "0-1234-123" (spawn_id exp_spawn0) match glob pattern "#"? no


Ich glaube das Problem kommt daher, dass die Daten die ich bekomme aus einem Telnet-spawn kommen und hier expect cshon matched, bevor die ganze Zeile angekommen ist. (Ist meine Vermutung)

Gruß Björn

netlinker
27-01-2006, 14:12
Hi,

wenn das Problem erkannt ist, ist ja nicht mehr so schwer es zu lösen:
Matche jetzt erst auf die "#" die nach der ID kommt, ohne dabei den Buffer zu leeren:

expect {
-i $main_telnet -notransfer "#" { expect {
-i $main_telnet -re "(\[A-Za-z0-9_-\]+)" { set old_id $expect_out(0,string) } } } }

Ciao Björn