Moin,
in meinem aktuellem projekt muss ich eine Schnittstelle zu dem Bugtracker JIRA entwickeln. Bin damit jetzt zu 99% fertig und scheitere an einer eigentlich ziemlich trivialen aufgabe.
ich kommuniziere über die REST API mit dem bugtracker und lade mir die entsprechenden Daten vom Server.
Ich habe nun in PHP Klassen erzeugt die, die empfangenen Daten verarbeiten und Kapseln, doch nun scheitere ich am Parsen der Kommentare.
Da mein Kunde im JIRA nur eine begrenzte Anzahl von Accounts anlegen darf, haben wir einen user "public" erzeugt der nun bei freigegeben Issues kommentare posten darf, über die von mit entwickelte Schnittstelle.
Das heißt alle kommentare kommen vom user "public", damit ich im Kundencenter meiner schnittstelle nun aber trotzdem unterscheiden kann welcher "wirkliche" user das Kommentar geschrieben hat, lasse ich jedem Kommentar 2 Zeilen vorwegstellen.
USER#XXXX
$ABC (Firma $DEF) schrieb am 12.10.2012 um 14:33 Uhr
mit X € N > 0 (die intere userid)
$ABC ist der Interne Username und $DEF ist die Firma zu der der User gehört.
Diese 2 Zeilen brauche ich in meiner Schnittstelle aber nicht und will sie rausscheniden, habe es mit einem regulären ausdruck versucht der auch funktionieren 'sollte'
In dem Programm regex coach fuktioniert er, aber in php nicht.
Irgendwie geht mir was mit den Umbrüchen ab.
folgender code funktioniert z.b.
(jetzt folgender code ist nur aus frust entsatnden um das problem zu finden)
dann habe ich einen Array in dem pro key eine zeile steht
folgender code geht aber nicht
dann habe ich immer nur ein element, welches den gesamten Text enthält.
Kann mir da einer erklären wieso ich den Umbruch als regulären ausdruck finde, aber nicht per explode? (habe schon dutzendemale nen string mit explode('\n') zerlegt, ich raffs net)
ich habe es btw. mit dem regex versucht
der soll mir halt einfach die ersten 2 zeilen löschen, leider muss der so allgemein gehalten werden da sich der Text auch ändern kann, als ende ist eigentlich nur entscheidend das 2mal ein \n auftaucht.
das interessante ist halt, wenn ich z.b. erst mit preg_replace alle \n ersetze, funktioniert mein regulärer ausdruck, aber sonst nicht. Finde das sehr merkwürdig, hat da jemand eine erklärung?
ich habe den ausdruck auch mittlerweile optimiert, mir geht es jetzt nur um dieses komische verhalten.
in meinem aktuellem projekt muss ich eine Schnittstelle zu dem Bugtracker JIRA entwickeln. Bin damit jetzt zu 99% fertig und scheitere an einer eigentlich ziemlich trivialen aufgabe.
ich kommuniziere über die REST API mit dem bugtracker und lade mir die entsprechenden Daten vom Server.
Ich habe nun in PHP Klassen erzeugt die, die empfangenen Daten verarbeiten und Kapseln, doch nun scheitere ich am Parsen der Kommentare.
Da mein Kunde im JIRA nur eine begrenzte Anzahl von Accounts anlegen darf, haben wir einen user "public" erzeugt der nun bei freigegeben Issues kommentare posten darf, über die von mit entwickelte Schnittstelle.
Das heißt alle kommentare kommen vom user "public", damit ich im Kundencenter meiner schnittstelle nun aber trotzdem unterscheiden kann welcher "wirkliche" user das Kommentar geschrieben hat, lasse ich jedem Kommentar 2 Zeilen vorwegstellen.
USER#XXXX
$ABC (Firma $DEF) schrieb am 12.10.2012 um 14:33 Uhr
mit X € N > 0 (die intere userid)
$ABC ist der Interne Username und $DEF ist die Firma zu der der User gehört.
Diese 2 Zeilen brauche ich in meiner Schnittstelle aber nicht und will sie rausscheniden, habe es mit einem regulären ausdruck versucht der auch funktionieren 'sollte'
In dem Programm regex coach fuktioniert er, aber in php nicht.
Irgendwie geht mir was mit den Umbrüchen ab.
folgender code funktioniert z.b.
(jetzt folgender code ist nur aus frust entsatnden um das problem zu finden)
Code:
$this->body = preg_replace('/\\n/', '##%##', $this->body);
$this->body = explode('##%##', $this->body);
dann habe ich einen Array in dem pro key eine zeile steht
folgender code geht aber nicht
Code:
$this->body = explode('\n', $this->body);
dann habe ich immer nur ein element, welches den gesamten Text enthält.
Kann mir da einer erklären wieso ich den Umbruch als regulären ausdruck finde, aber nicht per explode? (habe schon dutzendemale nen string mit explode('\n') zerlegt, ich raffs net)
ich habe es btw. mit dem regex versucht
Code:
$this->body = preg_replace('/user#\d+\\n([a-zA-Z ():0-9\.])*\\n{2}/', '', $this->body);
der soll mir halt einfach die ersten 2 zeilen löschen, leider muss der so allgemein gehalten werden da sich der Text auch ändern kann, als ende ist eigentlich nur entscheidend das 2mal ein \n auftaucht.
das interessante ist halt, wenn ich z.b. erst mit preg_replace alle \n ersetze, funktioniert mein regulärer ausdruck, aber sonst nicht. Finde das sehr merkwürdig, hat da jemand eine erklärung?
ich habe den ausdruck auch mittlerweile optimiert, mir geht es jetzt nur um dieses komische verhalten.