kostenloser Webspace werbefrei: lima-city


Mal wieder ein Regex :)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    Hiho,

    lang ists her, aber ich habe mal wieder eine Frage zu einem Regex :) Und zwar geht's um folgenden String:

    |cffa335ee|Hitem:71805:0:0:0:0:0:0:1070949632:85:0 |h[Königinnengranat]|h|r|cffa335ee|Hitem:71809:0:0:0:0:0:0:830766720:8 5:0|h[Schattenspinell]|h|r


    Es handelt sich hier um zwei WoW-Gegenstände als sog. "Itemstring". Der Aufbau ist eigentlich immer der Selbe:

    |YYY|HXXX:ZZZ|h[XXX]|h|r
    
    YYY = 9-Stelliger Farbcode
    ZZZ = Ausschließlich eine Zahl


    Ich möchte nun einen String nach genau diesem Schema durchsuchen und jedes einzelne Vorkommen ersetzen. Problem ist halt, dass mir im Moment der passende Regex fehlt.

    Beitrag zuletzt geändert: 17.8.2012 20:23:43 von fabo
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo,

    ich hab mal ein bisschen gebastelt und dieser Regex mapt:
    \|[a-z0-9]{9}\|Hitem:([0-9]|:)+ \|h\[(\w|&|#|;)*\]\|h\|r

    Es mag nicht der schoenste sein, aber funktionieren tut er bei mir (getestet mit tclsh).

    Du sagst zwar das ZZZ ausschliesslich eine Zahl ist, aber in dem String besteht ZZZ doch aus Zahlen und Doppelpunkten...so hab ich das jetzt zumindest im Regex abgebildet. Ich hoffe, das hilft dir weiter.

    Achja, den hintere Teil in den eckigen Klammern habe ich so gewaehlt, damit er auch bei bei nem greedy Allquantor funktioniert. Wenn deiner nicht greedy ist, kannst du auch "\[.*\] schreiben.

    Ich hoffe, ich konnte dir weiterhelfen, habe selber noch nicht soviel Erfahrung mit Regexen, deswegen war das eine gute Uebung ;)

    Achja, hier noch mein tcl code:
    set line "|cffa335ee|Hitem:71805:0:0:0:0:0:0:1070949632:85:0 |h\[Königinnengranat\]|h|r|cffa335ee|Hitem:71809:0:0:0:0:0:0:830766720:8 5:0|h\[Schattenspinell\]|h|r"
    
    if {[regexp {\|[a-z0-9]{9}\|Hitem:([0-9]|:)+ \|h\[(\w|&|#|;)*\]\|h\|r} $line match] == 1} {
        puts "match: $match "
    } else {puts "no match"}
  4. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    Hi,

    danke für deine Antwort. Ich habe mir das Ganze noch einmal angesehen und bin bisher bei diesem Ergebnis:

    ~\|([[:xdigit:]]{9})\|H([[:alpha:]]+):([[:digit:]]+)(?:\:.*)?\|(?:[[:space:]])?h\[(.*)\]\|h\|r~U


    Problem ist, dass es manchmal nicht funktioniert aufgrund eines Leerzeichens oder sonstigen Dingen. Daher auch die space-Funktion mittendrin :D
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!