Anhand deines Beispiels sieht es in http://www.regexr.com/ eigtl. alles gut aus. Aber sicher, dass die Koordinaten immer 3-stellig sind? [0-9]{1,3} oder \d+ wäre da wohl angebrachter.
Getestet mit $bericht="Bericht von Gloyonaid (333:183:G)"
Ergebnis:
3 capturing groups:
group 1: ([0-9]{3})
group 2: ([0-9]{3})
group 3: ([A-Z]{1})
Gib doch mal bitte einen richtigen Kontext. (Einen größeren Ausschnitt aus $bericht)
Außerdem, verwende bitte keine RegEx-Zeichen als Begrenzung, das ist doch etwas verwirrend beim drüberschauen
Um nur mal sicher zu gehen, lass dir mal $a ausgeben mit print_r e.ä., das Ergebnis unter [1][0] ist der gesamte match, nicht die Gruppen die du haben willst.
//P.S. jetzt seh ichs erst. Das kommt von, wenn man kein ordentliches Beispiel postet. Die Koordinaten sind garantiert nicht direkt hinter <h1>. Auch fehlt die schließende Klammer hinter den Koordinaten (da du sofort nach </h1> suchst).
Mach mal draus
[COLOR=#000000][COLOR=#DD0000]~<h1>.+\((\d+)[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]:([/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]\d+)[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]:([/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]\w+)\).*</h1>~[/COLOR][/COLOR]
, dann sollte es ausch fruchten. FYI, reguläre Ausdrücke liest man nicht, man untersucht sie *g* (zugegeben, dieses Beispiel war aber noch lesbar genug...)
Falls "<" ein unerlaubtes Zeichen im Spielernamen ist wäre
[COLOR=#000000][COLOR=#DD0000]~<h1>[^<]+\((\d+)[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]:([/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]\d+)[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]:([/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]\w+)[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]\)[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000].*[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]</h1>~[/COLOR][/COLOR]
besser. (.* hinter der Klammer sicherheitshalber hinzugefügt, falls da noch leerzeichen o.ä. stehen würden)
Getestet mit: "<h1>Bericht von Gloyonaid (333:183:G) </h1>"
Warum denn so kompliziert?
Teile das mit explode und Anhand des Leerzeichens in ein Array und das letzte Element des Array enthält dann deine gesuchten Koordinaten.
Anschliessend evtl. Klammern entfernen.
Weil du den Kontext nicht verstanden hast. Das ist wohl eine Scrapping Aufgabe, da kommst du ohne vorherige Suche / Eingrenzung nicht weiter mit nem stinkigen Explode alleine. Außer du meinst den Ausdruck so zu lassen wie er ist und nachbearbeiten, da kann man aber das gleich anders macen.
Aber ich würde auch eher empfehlen, ein Format zu definieren wie so ein Bericht eigtl. aussieht um einmal richtig zu parsen - damit hat sichs dann auch (sieht nach nem Browser-Game aus, die Formatierung ist also mehr oder minder fest)... Sprich, Zeilenweise parsen wäre imo der einfachere Weg. (Data -> Model -> be happy & done)