Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Reg expression unter expect?

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Question Reg expression unter expect?

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    161
    Das waere schonmal passender, glaube ich:
    Code:
    -re "([A-Za-z0-9_-]+)"
    Samsara
    .
    Interface design
    whohas - wer hat's im Repository? Debian? Fedora? Gentoo? ...?
    Hardware compatibility list - das Original mit bereits 3000 Einträgen
    It ain't a hack if it ain't dirty.

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Question

    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

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Talking

    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •