Trennzeichen in String einfügen

Frezl

Erfahrenes Mitglied
Salü Ihr!

Ich arbeite z.Zt an einem "Liederbuchgenerator", der Gitarrenakkorde korrekt über einen Liedtext schreiben soll. Der Text mit den Akkorden liegt in folgendem Format vor:

Code:
[G] It's late in the [D]evening,[ C] she's wondering what [D]cloth to wear.
[G] She puts on her [D]make-up [ C] and brushes her [D]long blond hair,...

Jetzt soll der Liedtext wie folgt mit Trennzeichen versehen werden, anhand derer ich später den Text zerschnibbel:

Code:
[G]~ ~It's late in the [D]~evening,[ C]~ ~she's wondering what [D]~cloth to wear.
[G]~ ~She puts on her [D]~make-up [ C]~ ~and brushes her [D]~long blond hair,...

Wie man sieht soll
a) nach jedem Akkord ein Trennzeichen stehen
b) wenn nach dem Akkord ein Blank kommt, sowohl nach dem Akkord, als auch nach dem Blank ein Trennzeichen stehen

Die Regexes, mit denen ich die Akkorde mit bzw. ohne Blank finde, hab ich schon ausgetüftelt - leider habe ich keine PHP-Funktion gefunden, mit der ich die Trennzeichen an der betreffenden Stelle einfügen kann :-P

Weiß einer von euch, wie man das bewerkstelligen könnte?

Grüße, Fred
 
Hi Loomes!

preg_replace() ersetzt meines wissens Zeichenketten durch eine andere. Ich will ja aber ein zusätzliches Zeichen einfügen.

Ich könnt natürlich immer den Akkord durch den Akkord+Trennzeichen ersetzen lassen, aber dazu muss ich ja immer genau den aktuellen String kennen, damit bei der Ersetzung genau der richtige Akkord eingesetzt ist *?* Kannst du mir ein Beispiel nennen, wie dus mit preg_replace() machen würdest?

Grüße, Fred
 
Hab mich jetzt mal mit preg_replace() versucht, aber es führt zu keinem Ergebnis - also wirklich zu keinem :-P

PHP:
  // Datei laden:
  $filestring = file('songs/'.$_POST['song']); // Datei wird zeilenweise in das Array $filestring geschrieben
  $rowcount = count($filestring); // Zeilenanzahl wird gezählt
  
  // Zeilen einzeln bearbeiten:
  for($i=0; $i<$rowcount; $i++)
  {
    // Akkorde finden:
    $regex_chords1 = '%(\[[a-zA-Z0-9]*\])%'; // findet Akkord
    $regex_chords2 = '%(\[[a-zA-Z0-9]*\][ ])%'; // findet Akkord mit anschließendem Blank

    // Trennzeichen setzen:
    $filestring[$i] = ereg_replace($regex_chords1, '${1}~', $filestring[$i]);
    $filestring[$i] = ereg_replace($regex_chords2, '${1}~', $filestring[$i]);

    //Leerzeichen durch &nbsp; ersetzen:
    $filestring[$i] = str_replace(' ', '&nbsp;', $filestring[$i]);
    
    // AUSGABE TEST
    echo $filestring[$i]."<br>";
  }

Bin ich zu blöd für die Regexes, oder hab ich das mit den Variablen bei der Ersetzung falsch verstanden?

Die Ersetzung der Leerzeichen mit str_replace() funktioniert dagegen Problemlos...

Grüße, Fred
 
Sorry, ich meinte preg_split()

PHP:
$array = preg_split($regexp, $string);
Dann kannst du deine ~ einfügen. Also Schleife starten und neu zusammensetzten.
Glaube ich. Musst du bischen probieren :)
 
Hi,

könntest Du das nicht einfach so machen:

PHP:
$zeile = str_replace(']', ']~', $zeile);
$zeile = str_replace(']~ ', ']~ ~', $zeile);

Oder kann in den Liedtexten eine eckige Klammer vorkommen?

LG
 
Hey Kuddeldaddeldu!

Cleverer Ansatz! Und mit meinem Beispiel funtkioniert er auch :-) Ich habs immer mit den Regexes probiert, weil ich im nächsten Schritt sowieso die Akkorde damit auslesen muss. Aber so gehts evtl. auch...

Ich probiers mal aus. Weil eigentlich war mein Plan, dass ich Chorus und strophen wie mit BBCode markier, also

Code:
[CHORUS]
Bli[ C]bla[G]blubb
[/CHORUS]

Muss mal sehn, ob das dann auch noch gut funktioniert...

Danke auf jeden Fall, für den Tipp!

Gruß, Fred
 
Zurück