Regex?

Hallo Leutz,
hab schonimmer ein Problem mit Regex, habs noch nie wirklich gebraucht bzw. verstanden. Ich bräuchte eure Hilfe bei dem folgenden Problem: Ich habe einen String der z.b. so aussieht: [Test1]=„Test Satz 1“ [Test2]=„Test Satz2“ Jetzt möchte ich das so gesplittet haben das ich ein Array habe das so aussehen würde:

Array
(
 [0] =\> =[Test1]="Test Satz 1"
 [1] =\> =[Test2]="Test Satz 2"
)

Oder besser wäre noch

Array
(
 [Test1]="Test Satz 1"
 [Test2]="Test Satz 2"
)

aber das könnte man auch anschliesend mit explode machen wäre also nicht das Problem.
Das Problem ist nur das zwischen den Sätzen Zeilensprünge stehen können aber nicht müssen, also könnte der String auch so aussehen:
‚[Test1]=„Test Satz 1“
[Test2]=„Test Satz2“‘

Ich hab da schon was gebastelt allerdings gibt es mir nur den zweiten Teil aus:

preg\_split( '/\[+.+\]/', $str, -1, PREG\_SPLIT\_NO\_EMPTY );

Wäre toll wenn jemmand nen Link hat wo es ein ähnliches Beispiel gibt das gut er klärt ist oder selbst villeicht mein Problem lösen könne und erklärt.

es ist besser wenn man regex selber versteht, daher nur ein link zum thema:
http://regexp-evaluator.de/tutorial/

hat mir sehr geholfen, vielleicht ja auch dir.

Hi, danke hat mir sehr geholfen habs auch fast geschaft nur wenn ein = im hinteren string auftaucht lässt php es aus, ich weiß auch woran es liegt: weil ich kein = zulasse aber wie sieht das denn aus wenn man alle zeichen erlaubt? hab es mit

preg\_match\_all('#\[[a-z0-9]\*]\=\".\*\"#', $str,$zeichen);

probiert aber ohne Erfolg.

preg\_match\_all('#\[[a-z0-9]\*]\=\"[a-z0-9]\*\"#', $str,$zeichen);

das ist die Funktion die mir das = auslässt.

Hallo,

Hmm, das ‚=‘ brauchst Du iirc nicht zu escapen
(ausser im regex-Kommentar (PHP 5.2.8).

Ich würde etwas anders rangehen, z.B. so:

# regulärer Ausdruck in /x-Schreibweise
$reg = '{ 
 \[( [^]]+ ) \] # Inhalt der eckigen Klammern (Zeichenklasse)
 \s\* = \s\* # das \= evtl. mit Leerzeichen
 " ( [^"]+ ) " # Inhalt der Anfuehrungszeichen
 }x';

# Variante 1
if( preg\_match\_all($reg, $string, $m) ) {
 $result = $m;
} 

# Variante 2
if( preg\_match\_all($reg, $string, $m) ) {
 $result = array\_combine($m[1], $m[2]);
}

Grüße

CMБ

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Oh sehr gut super danke :smiley: