StringRegExp zwischen Subject und zeilenumbruch.

  • Hi,
    ich hab ein Problem. Also ich möchte gern per AutoIT ein Emailclient machen. Ich kann bis jetzt super alles aufrufen, aber ich möchte gern den Betreff auslesen.

    Das Problem ist das erst mal alles vom header gezeigt wird und irgendwann kommt die Zeile:

    Zitat

    "Subject: Test
    irgendwas..."

    Was ich brauche ist "Test". Das ist der Betreff. Also irgendwie zwischen Subject: und zeilenumbruch.

    Ich habs bis jetzt so

    [autoit]

    $StringR = StringRegExp($recv, 'Subject: (.+)',3)

    [/autoit]


    aber das geht net :S

    Nebenbei: Ich suche eine gute Regex tutorial. Alleine Autoithandbuch reicht nicht. Zwar werden alle Möglichkeiten angezeigt , aber ich verliere da den Überblick und weiß nicht was ich da raussuchen soll :S.

  • Probiere es mal mit:

    [autoit]


    $StringR = StringRegExp($recv, '(?i)Subject:\s+(.*)\n',3)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • So sollte der regex besser sein:

    [autoit]

    $sSubject = StringRegExp($recv, '(?im)^Subject:\h*(.*)$',1)
    If IsArray($sSubject) Then $sSubject = $sSubject[0]

    [/autoit]
  • Kannst du die Mail Datei hochladen? Denn mit dem Text von oben bekomme ich Test in dem Array zurück!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Oder in SEuBo's Signatur schauen... ;)

    ich wusste, das da doch was war.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • So sollte der regex besser sein:

    [autoit]

    $sSubject = StringRegExp($recv, '(?im)^Subject:\h*(.*)$',1)
    If IsArray($sSubject) Then $sSubject = $sSubject[0]

    [/autoit]


    Besten Dank. Das funktioniert Super!!

    Kannst du die Mail Datei hochladen? Denn mit dem Text von oben bekomme ich Test in dem Array zurück!
    Gruß,
    UEZ


    Es gibt keine Datei. Ich verbinde mit TCP und lasse es in Gui anzeigen in einem Textfeld. Aber wenn dich trotzdem interessiert zeig ich hier ein Teil

    Spoiler anzeigen



    Schonmal versucht, nach einem StringRegExp Tutorial zu googlen?


    Ich habe nur nach Regex gesucht.. StringRegExp ist mir nicht dummerweise eingefallen :D. Ich habs damals für andere Sprachen auch gebraucht. Ich finds trotzdem sehr schwer das alles zu merken ich meine die leichten basic sachen wie \w \W oder \A oder sogar . sind einfacher zu merken aber wenn dann ^ \b + ? - * kommt die irritieren mich.

  • ^ steht für Stringanfang, $ steht für Stringende, mit der Option (?m) wird durch ^zusäzlich Zeilenanfang und durch $ Zeilenende gefunden.
    Ich weiß auch nicht genau, wie ich mir das merke, aber es ist irgendwie etwas mit ^ Zeigt nach oben links (dort fängt ein Text an) und $ ist irgendwie endgültig, durchgestrichen, STOP also Stringende ;) Und die meisten Spezialzeichen mit Backslash sind Abkürzungen für englische Wörter: \d = digit = Ziffer, \s = space = Leerraum, ...
    Plus ist auch nicht schwer: Q+ heißt ... Q und dann plus noch mehr Q ;)

  • Hallo nochmal. Danke für die Erklärung. Ich habe zwei verschiedene Tutorials bis zu 80% gelesen (Soll heißen: Das eine durchgelesen und das andere knapp am Beenden).

    Jetzt hab ich ein Problem mit Anführungsstriche.

    Und zwar ist der Bsp.satz so

    [autoit]

    $String = """http://bla.de/?id=10000&subid=100"""
    $StringR = StringRegExp($String, "\bid=178426&(.*)\b", 1)
    if(IsArray($StringR)) Then
    _ArrayDisplay($StringR, "Ergebnisse der StringRegExp")
    Else
    ConsoleWrite("Etwas gefunden?: " & $StringR & @CRLF)
    EndIf

    [/autoit]


    Der findet zwar bis 100 aber ich weiß nicht wie ich das mit anführungsstriche machen kann (nur am ende, der anfang ist egal)
    Hab schon so versucht:

    [autoit]

    $StringR = StringRegExp($String, "\bid=178426&(.+[""]*)\b", 1)

    [/autoit]


    Es findet zwar was, aber wieder bis 100 (oder ArrayDisplay zeigt es nicth an :P