preg_split -- string aufteilen

  • Moin,
    weiß jemand, wie ich aus einem String per regex immer die zusammengehörigen Worte bekomme?
    Das Prinzip:
    - ein Wort kann im String unmaskiert eingefügt werden
    - zusammenhängende Worte müssen per "" oder '' maskiert werden


    Das Problem sieht man bei /* result ... */,
    wie es aufteilen sollte bei /* expected ... */


  • Du willst die unnötige array-keys raus löschen? :D
    -nein das kann nicht sein, zu simpel :p
    Höäh?


    Wenn du immer die zusammengehörenden wörter innerhalb von einfachen oder doppelten anführungszeigen haben willst.. etwa so:

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von wolf ()

  • Danke schon mal.
    Bin mit preg_match_all nicht klargekommen und bei preg_splitt geblieben.
    Soweit hab ichs hinbekommen, aber ein paar Kleinigkeiten sind da noch:


    Zum einen result offset [1]: "und "
    und offset [9]: "und ende "


    Ersteres (Leerzeichen) könnte ich trimmen,
    aber irgendwie bekomme ich die nicht maskierten getrennt.


    EDIT:
    habs mit preg_match_all nun auch hinbekommen,
    ausser die unmaskierten am Ende:


    Wie bekomme ich die "und ende" am Ende auseinander?

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von cottton ()

  • Ich würde die Maskierungszeichen zunächst mit in das Ergebnis übernehmen. Dann das Array abarbeiten und die Elemente, die keine Maskierungszeichen haben, nochmal mit split zerlegen. Am Schluss die Maskierungszeichen entfernen. Allerdings wird das relativ kompliziert. Ich glaube, wenn ich diese Aufgabe hätte, würde ich einen einfachen Parser schreiben, der den String Zeichen für Zeichen abarbeitet, die Maskierungszeichen erkennt und entsprechend die Elemente herauszieht. Oder, wenn Du die Notation ändern kannst, ein anderes Schema nehmen, was sich leichter auswerten lässt.

  • Sempervivum
    Das würde zu "lang" dauern.
    Das Ganze ist Teil einer Funktion, die (Socket-)commands/-Packete maskiert/de-maskiert.
    Bei viel traffic könnte das schon einige hundert in der Sekunde ausmachen.


    Ich hab nicht rausbekommen, wie ich das letzte "und ende" auseinander bekomme.
    Ist aber auch nicht so schlimm. Die Maskierung sollte ja "entweder, oder" genutzt werden -- also entweder nicht, oder ' / " -maskiert.


    Zwecks Geschwindigkeit ist preg_split auch deutlich schneller:

  • "Das würde zu "lang" dauern."
    Das wäre erst noch zu beweisen. Ein preg_match schreibt sich zwar sehr kurz in einer Zeile, aber das muss nicht heißen, dass es von der Ausführungszeit auch sehr kurz ist. Es könnte sein, dass das Auswerten einer RE rechenzeit-intensiver ist als eine kleine Schleife, die nur mit einem Index auf den String zugreift. Leider kenne ich mich mit dem Profiling unter PHP nicht aus, sonst würde ich es gern ausprobieren.

  • Naja, wenn die Schleife in C/C++ wäre, dann könnte ich mir das vorstellen.
    In PHP kann es aber "Schleifen" :D


    Man sollte ja vordefinierte PHP-Funktionen nutzen, da diese in der Regel schneller sind.
    Wenn ich also per PHP eine Schleife nutze, wird das sicherlich langsamer sein, als per regex.
    Ausnahmen gibts ja immer - wie zB array_filter. Musste gestern feststellen, dass array_filter langsamer ist als ein foreach.


    Achja - das Schema kann ich leider nicht ändern. ist von der Schnittstelle vorgegeben (BF Rcon-Protocol).

  • Du meinst ein Tool um den Server zu regeln?
    Da kenn ich keins. Zocke nur Battlefield =) Hab auch gerade mal gesucht, aber nix gefunden.
    Hat sich evtl noch keiner die Mühe gemacht ein Tool für cod zu schreiben.


    In vlt 2 Monaten (wenn ich das Protokoll finde) könnte ich eins fertig haben =)