Anzeige:
Ergebnis 1 bis 15 von 31

Thema: RegEx Problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62

    RegEx Problem

    hiho zusammen,

    vieleicht könnt ihr mir bei meinem kleinen problemchen helfen.
    also, als erstes mal ne kleine exkursion zu dem endziel.
    ich möchte ein kleines protokoll entwickel, um die kommunikation mit verschiedenen datenquellen zu vereinheitlichen (die datenquellen sind einem von mir geschriebenen applikationsframework zugehörig) es funktionert auch recht gut. das einzige, was mich noch stört ist das ganze rumgefummel an den request strings, nun hab ich mir überlegt, dass das ganze doch mit regexp's wahrscheinlich leichter zu handlen sei.
    aber pustekuchen, mein ausdruck hat nie einen match, nur weiß ich leider net, an welcher stelle es hackt (der syntaxparser beschwert sich nicht, also muss es ein gültiger ausdruck sein).

    so, nun zum konkreten problem:
    ich habe einen protokoll string, der in etwa so aussieht

    hpf-net://req="run";object[objname="obj1",obj="{serialisiertes Objekt}"]

    nun würde ich gerne ein paar dinge herausfinden wenn ich ein request bekomme:
    1. ist der request string von meinem protokoll
    2. was steht in ihm (am besten gleich splitten)

    aber mein ausdruck(eine zeile drunter) stellt nicht einmal fest ob der string gültig ist
    "^hpf(-net|-db)://.*"

    kennt einer von euch vieleicht ein gutes tutorial für regex ?

    mfg
    hpf

  2. #2
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    tutorials gibt es zu hauf.

    einfach google befragen.

    Ansonsten empfehl ich dir die API, wo die Unterschiede von Java zu Perl-Regex ganz gut erklärt werden. Ich verwende zum Testen gerne dieses Applet

    Deine Regex sagt in der Gruppe derzeit nur, dass es ein -net-Aufruf ist.

    Jetzt kommt es natürlich darauf an, was du genau möchtest.

    Wenn du folgende Ausgabe z.B. möchtest:

    Code:
    group(0) = "hpf-net://req="run";object[objname="obj1",obj="{serialisiertes Objekt}"]"
    group(1) = "-net"
    group(2) = "obj1"
    group(3) = "serialisiertes Objekt"
    folgende Regex verwenden:
    Code:
    ^hpf(-net|-db)://.*objname="(.*)",obj="\{(.*)\}".*
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    erstmal vielen dank für den link, das applet is echt spitze, inzwischen klappt das auch ganz gut, nun habe ich aber ein kleines/großes problem, mit dem preparierten string "hpf-net://req="run";object[objname="obj1",obj="{serialisiertes Objekt}"]"
    klappt es nun aber wenn ich den teil {serialisiertes Objekt} durch ein echtes serialisiertes object (den bytarray output als string) ersetzte, schlägt es wieder fehl kann man ihm in dem regex noch beibiegen, dass ihm absolut egal ist was für zeichen in einem bestimmten abschnitt verwendet werden ?

    mfg
    hpf

  4. #4
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    .* heißt eigentlich schon irgendwelche zeichen, und zwar beliebig oft.

    Kannst du mal ein Beispiel für so einen Bytearray bringen?
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  5. #5
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin!

    @hpf:
    Nimm's mir nicht übel, aber als Informatik-Student finde ich Deinen gesamten Ablauf etwas "unelegant".

    Ich persönlich würde an derartige Probleme in zwei Schritten herangehen:

    Als erstes würde ich den String durch einen handgemachten Tokenizer zerlegen und dann im zweiten Schritt mit den Tokens weiterarbeiten. Das ist übrigens auch gleich eine gute Kontrollmöglichkeit, denn in dem Moment, in dem Du feststellst, dass sich Dein String nicht eindeutig zerlegen lässt, müsstest Du Deine Syntax nochmal überdenken, Du sicherst Dich also nochmal gegen nicht eindeutige Syntax ab.

    So long,
    Liberty

    P.S.:
    Hast Du irgendwo Deine Syntax schonmal vernünftig dokumentiert, sieht im Moment ehrlich gesagt ein klein wenig unsauber aus...
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  6. #6
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    @Liberty keine sorge, ich nehm dir nix übel, aber das hab ich schon getan ^^ aber mit regex würde ich den code (bis auf die expression selbst) extrem siplifizieren ^^

    mfg
    hpf

  7. #7
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    hmm, der string lässt sich net vernünftig aus der console kopieren, der scheint escape sequences zu enthalten, aber ich hab mal nen bild gemacht. ich bräuchte im prinzip nen "ignore ascii mode für den part".



    mfg
    hpf

  8. #8
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin,

    das könnte ja auch der Grund sein, warum Du mit den RegExp's Probleme hast.

    Ich gehe mal davon aus, dass Deine Protokoll-Strings grundsätzlich "human-readable" sein sollen und evtl. auch als reine Text-Strings verarbeitet werden sollen.
    Deshalb solltest Du vielleicht mal überlegen, ob Du die problematischen Teile nicht in einen int64-Code umwandeln solltest, bevor Du sie in Deinem String verwendest. Das könnte evtl. die Verarbeitung durch RegExp's erleichtern.

    So long,

    Liberty
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Was dir das ganze etwas leichter machen würde, wäre, wenn du mal eine formale Syntax-Grammatik für deine Requests definierst, etwa in der Art
    Code:
    Request    ::= Protokoll '-' Subprotokoll '://' Service ';' Request ';' ObjectList
    Protokoll  ::= 'hpf'
    ...
    ObjectList ::= 'object[' Objects ']'
    Objects    ::= Object ';' Objects
    Objects    ::= Object
    Object     ::= ObjectName ',' ObjectValue
    ...
    Damit ist es dann deutlich leichter, so einen Request zu analysieren; im günstigsten Fall kannst du (je nach verwendeter Technik) die Grammatik direkt als Eingabe für einen (Java-) Parser verwenden.

    Ich würde dir auch dringend davon abraten, in dem Request-String mit serialisierten Objekten zu arbeiten. Besser wäre in meinen Augen tatsächlich eine text-basierte Struktur.

    PS: Und das sage ich als in zwei Wochen fertiger Dipl.-Inf.
    PPS: Um mal an die "Nebendiskussion" in diesem Thread anzuknüpfen: Ich habe schon mit Dr. Dipl. Inf.'s gearbeitet, wo ich mich gefragt habe, wie viel Geld die wohl für ihre Titel bezahlt haben. Auf der anderen Seite waren zwei der fähigsten Informatiker, mit denen ich bisher arbeiten durfte, Dipl. Physiker respektive Dipl. Mathematiker...

  10. #10
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    danke für den tip, ich muss mal schauen wie ich nun weiter verfahre.
    das ganze soll wie gesagt am ende eine schmale slp implementierung als subprotokoll bekommen, da wären textorientierte requests praktischer, aber es soll ein weiteres subprotokoll geben, welches rpc zugriffe handeln soll, dieses sollte serialisierte objekte als parameter(für funktionsaufrufe) und rückgabewerte mit übertragen können.
    Um mir dann einen zusätzliche verbindung (ObjectStream) zu sparen, wollte ich die objekte gleich im request string mit unterbringen.
    vielleicht ist auch die bezeichnung request unglücklich gewählt, im rpc subprotokoll wird es auch eher "method" oder "action" heißen ^^

    mfg
    hpf

  11. #11
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    @hpf

    Also so eine Liste ist nicht möglich mit regex.

    Auch mit 2 Regulären Ausdrücken ist es schwer dem hier beizukommen.

    Man kann es ja versuchen, aber ich würde hier tatsächlich eine XML-Lösung anstreben, und die 10%-Performanceverlust können sich ja nur im Millisekundenbereich abspielen.
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  12. #12
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    jo, der performance verlust spielt sich wirklich nur im millisekundenbereich ab, ich werde nochmal nen bisschen experimentieren, mal schauen vieleicht kriege ich ja noch nen bischen leistung aus dem SaxParser heruaus gekitzelt.

    mfg
    hpf

  13. #13
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154

    Nebendiskussion

    Moin,

    ich drück mich gerade vor ein wenig Kleinkram, den ich eigentlich zu morgen erledigen sollte, also reiche ich jetzt mal mein Schlüsselerlebnis mit dem Negativbeispiel eines Dipl.-Ings. nach...

    Zur Vorgeschichte: Ich hab' diesen Sommer das alte Netzwerk in der Kanzlei meiner Eltern (4 Rechner ohne Server, verbunden über Standard-Bordmittel von Windows) von Windows 98 auf WinXP migriert und dabei ein wenig getrickst um einem der Rechner Server-Aufgaben unterzujubeln, Hauptabweichung vom Standard war, dass ich dem Netzwerk servergespeicherte Profile ohne Server verpasst habe. Ich gebe zu, ich hab' da auch insgesamt 3 Wochen dran gesessen, bis ich mit dem Ergebnis zufrieden war. War aber kein Problem, ich konnte mir die Zeit nehmen, weil meine Eltern und das Vorzimmer weiterhin parallel mit dem alten System weiterarbeiten konnten. Soweit so normal, Office 2003 Prof. und den NAV überall installiert, passt.
    Eine Woche zieht ins Land, ich mach noch ein wenig harmloses Feintuning, lasse die Kanzlei aber schon mit dem neuen System arbeiten, alles bestens, bis plötzlich die Meldung "Sie sind Opfer einer Softwarefälschung geworden" aus dem Nichts auftaucht und einfach nur nervt. Außerdem fing parallel der NAV an, herumzuzicken. Ich mich eine Woche mit dem Problem herumgeärgert, einige Möglichkeiten ausgeschlossen, finde aber keine Lösung. Leider musste ich dann auch zurück nach Helsinki, also habe ich meinen Eltern klargemacht, dass wir einen externen Experten brauchen. Das habe ich denen schon seit längerem immer wieder vorgebetet, dass die sich schon im "Frieden" jemanden suchen sollen, der die Betreuung des Netzwerks übernehmen kann, da ich auf Dauer weder Zeit noch... (ups, ich schweife ab )

    Das war der Punkt, an dem Dipl.-Ing. Fuchs (Name geändert) auf den Plan tritt. Der war uns von Bekannten meiner Eltern empfohlen worden, also haben wir den auf das Problem losgelassen. Leider haben wir vergessen, uns vorher zu erkundigen, worin Herr Fuchs nun genau Dipl.-Ing. ist, denn der Mann hat weder verstanden, wie ich das Netzwerk strukturiert habe (zur Erinnerung: Ich habe keine Werkzeuge von Drittanbietern verwendet, sondern ausschließlich mit Freigaben und Gruppenrichtlinien gearbeitet) noch hat der Mann sich irgendwie sinnvoll zum Problem geäußert, stattdessen hat er plötzlich angefangen, ohne vorherige Absprache mit den Anwendern an den Workstations Einstellungen zu verändern, die ich vorher mühsamst und perfektionistisch mit den betroffenen Anwendern abgestimmt habe und darüber hinaus hat er auch noch irgendein mir unbekanntes Tool namens Netzpost installiert, dessen Nutzen niemandem in der Kanzlei eingängig war und wenn ich persönlich eins nicht abkann, dann ist es, wenn irgendwelche Halb-Experten anfangen, sauber neuaufgesetzte Systeme mit irgendwelchem Kleinscheiß vollzumüllen.
    Dazu sollte ich an dieser Stelle erwähnen, dass ich in zwei Telefongesprächen mit Herrn Fuchs ausführlich versucht habe, ihm alle Infos, die ich bereits über das Problem selbst ermittelt hatte, weiterzugeben und ihm darüber hinaus zu erklären, wie ich das Netzwerk aufgebaut habe und wenn er's danach immer noch nicht kapiert, dann sind selbst 40€/Std noch zu viel. Jedenfalls wurde Herr Fuchs dann nach einem halben Tag ohne Ergebnis von meiner Mutter in der ihr in solchen Situationen eigenen Art mehr oder weniger rausgeworfen. Er wollte sich daraufhin mit einer Analyse und einem "Konzept" wieder an uns wenden und das hat er dann auch getan und dann ist uns endgültig der Kragen geplatzt, denn da stand unter anderem als Problemlösung "Weiterer Kontakt mit Herrn L." drin (Herr L. bin ich selbst). Also wenn ich ihm sagen soll, wie er das Problem lösen kann, dann könnte ich da auch einen fachkundigen Freund von mir, der in der Gegen wohnt hinschicken und das übers Telefon machen, aber wenn ich als bisheriger Admin ausdrücklich einen weiteren Experten anfordere und ihm sage "Sie sind hier, weil ich nicht weiterkomme", dann ist die von Herrn Fuchs vorgeschlagene "Problemlösung" doch echt eine Frechheit.
    Darüber hinaus hatte Herr Fuchs offensichtlich ein gewisses Problem mit Respekt, denn nur weil ich auch aus dem gleichen Fachbereich (oder eben nicht ) komme, heißt dass noch lange nicht, dass er mich kumpelhaft duzen darf. Ich mag in solchen Dingen etwas altmodisch sein, aber ich lege einen gewissen Wert auf äußere Form. Und in diesem Fall hätte Herrn Fuchs durchaus klar werden können, dass nicht zuletzt ich darüber entscheide, ob und was er im Büro meiner Eltern veranstalten darf und dass ich seine Arbeit in gewisser Weise "bewerte".
    Aber das wäre mir sogar egal gewesen, wenn er nebenbei noch das Problem gelöst hätte, aber stattdessen hat er sich mit "Problemen" beschäftigt wie "Sie brauchen unbedingt Mozilla" oder "NAV ist wie wir alle wissen großer Mist und langsam", dabei hat der Mann von Anfang an die Ansage bekommen, dass er sich erst über andere Themen Gedanken machen darf, wenn er mir zumindest erklärt hat, wo das Problem liegt und dann kann ich immer noch entscheiden, ob er anderen Kleinkram gleich in eniem Aufwasch miterledigen darf/soll, bzw. meine Eltern dahingehend beraten.
    Aber das waren alles so Dinge, die Herr Fuchs echt nicht verstanden hat, also durfte er seine bis dahin getätigten Bemühungen kurzfristig abrechnen und damit war Herr Fuchs für uns erledigt.

    Mittlerweile haben wir das Problem an eine etwas größere Firma abgegeben und der Mitarbeiter, den die uns geschickt haben, ist voll in Ordnung. Der hat zwar das Problem bis jetzt auch nicht lösen können, aber er hat zumindest alle meine Aktionen verstanden und die Nachfragen, die er an mich hatte, waren absolut sinnvoll und verständlich und nachdem er sichergestellt hat, dass das Problem außer der Tatsache, dass es ein wenig beim Arbeiten stört, keinen Schaden anrichtet und nicht auf Viren/Würmer zurückzuführen ist, haben wir uns erstmal auf Weihnachten vertagt und dann werde ich das Netzwerk wohl endgültig übergeben und dann sehen wir weiter.
    Jedenfalls war das von der Professionalität her ein Unterschied wie Tag und Nacht, allerdings befürchte ich, dass der zweite, fähigere Mensch nicht mal Dipl.-Ing. ist, also bleibt deren Ruf bei mir leider zerstört...

    So long,
    Liberty

    P.S.:
    Ich glaube im Nachhinein, dass Herr Fuchs auch einfach nicht damit umgehen konnte, dass es da jemanden gibt, der ihm mit entsprechendem Fachwissen auf die Finger schaut, so dass er diesen Kunden nicht einfach sein Schema F vorsetzen kann, denn ich habe ganz allgemein den starken Verdacht, dass sich viele Firmen in der Branche schlicht und ergreifend ihre Kunden weitestgehend "zurechterziehen", so dass die Systeme möglichst nah an einem einheitlichen Schema bleiben.
    Geändert von Liberty (20-10-2006 um 18:21 Uhr)
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  14. #14
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Das ist ein durchaus verbreitetes Problem - Leute, die wissen wie man einen Computer einschaltet und von CD booten können werden automatisch (von denen, die das nicht können) in den Stand eines ausgewiesenen Experten befördert. Ein kleines Beispiel dazu: ein Freund von mir macht eine Ausbildung zum Fachinformatiker (Systemintegration) bei einer karitativen Einrichtung - und seine beiden "Chefs" sind Ex-Maurer und Ex-Gärtner. Warum? Weil sie wissen wie man einen Rechner einschaltet und von CD bootet.
    Dem gemeinen Dipl-Ing sollte man zumindest ein gewisses technisches Verständnis unterstellen, das unter Umständen hilfreich sein kann (aber wie oben zu lesen ist nicht unbedint muss).
    Whatever, ich denke das liegt insgesamt daran, dass es noch nicht lange genug trendy ist, dass jeder alles mit dem Rechner macht, ergo auch noch gut ausgebildetes und erfahrenes Personal fehlt. Und da zählt dann halt wieder unter den Blinden ist der Einäugige König. Und frag mal deine Eltern, was wohl aus der Sache mit Herrn Fuchs geworden wäre, wärest du nicht da oder in der Lage gewesen, seine Vorgehensweise zu hinterfragen. Haben deine Eltern entsprechende Kompetenzen, dass sie diese Probleme ähnlich schnell erkannt hätten?
    Insgesamt bin ich dennoch der Meinung, dass eine Beweisführung über die allgemeine Inkompetenz des gemeinen Dipl-Ings nicht per vollständiger Induktion erfolgen kann

  15. #15
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin,

    meine Eltern können zwar die Fachkenntnis nicht unbedingt mit meiner eigenen Treffsicherheit beurteilen, aber meine Mutter, die sich das Elend live angeschaut hat, meinte, dass bei Herrn Fuchs auch die ganze 'allgemeine' Professionalität nicht vorhanden war und dass können Kunden ja durchaus erkennen.
    Außerdem hat Herr Fuchs sich ja schon auf so sinnlosem Gebiet wie "Ich habe die TFTs auf die optimale Auflösung eingestellt" "Warum?" "Ja ist halt besser..." Was Herr Fuchs nicht wusste (aber durchaus durch gezieltes Fragen hätte herausfinden können), ist, dass ich jedem Anwender in der Kanzlei erklärt und gezeigt habe, warum die optimale Auflösung (also Hardwareauflöung = Softwareauflösung) grundsätzlich die beste weil schärfste und klarste ist und sich die Anwender dann trotzdem dafür entscheiden, eine andere Auflösung (mit Interpolation) zu verwenden, dann ist das eine Entscheidung, die ich als Admin respektiere, frei nach dem Motto, die Anwender sollen nach ihren eigenen Bedürfnissen vernünftig arbeiten können und eben nicht nach Schema F...
    Ich breite diesen eigentlich lächerlich unwichtigen Punkt hier so aus, weil das der Punkt war, an dem meine Mutter sich auch ohne meine Mitwirkung schon gefragt hatte, ob der Kerl jetzt so wirklich das Gelbe vom Ei ist...

    So long,

    Liberty

    P.S.:
    Je länger ich drüber nachdenke, desto mehr glaube ich, dass dieses Phänomen wohl weniger mit dem Titel "Dipl.-Ing." als mehr mit der IT-Branche an sich zu tun hat.
    P.P.S.:
    Und wenn ich mir überlege, was damals Mitschüler von mir in der Oberstufe an astronomischen Preisen für lächerlich stupides Webdesign genommen haben, da ist mir schon fast schlecht geworden. Bei den Preisen hatte ich schon fast ethische Bedenken, allerdings hält mich die Gewissheit aufrecht, dass aus den betreffenden Leuten auf Grund echter Fachkenntnis auf Dauer eh' nix wird und ganz am Ende meistens doch Qualität über Show und Schnackerei siegt... Hoffentlich...
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

Lesezeichen

Berechtigungen

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