2017-03-22 4 views
1

Ich bin leider nicht so vertraut mit Regex - so kann mir jemand dabei helfen? Ich habe diese Saite:PHP get Zeichenfolge mit Preg übereinstimmen

$theString = 'MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL' 

Und alles, was ich will ist, den Inhalt zwischen den zwei eckigen Klammern zu extrahieren, die in diesem Beispiel soll ich ‚DDAADD‘ bekommen.

Das Ziel ist meine Zeichenfolge zu explodieren, dass ich 3 Saiten erhalten:

$first = 'MYSTRING-'; 
$second = 'DDAADD'; 
$third = '-IS_SO_BEAUTYFULL'; 

Wie kann ich es erreichen?

Ich versuche es mit preg_match aber ich kann es nicht die Arbeit an:

preg_match('/[^a-zA-Z0-9\[\]]+/', $string, $matches); 

ich dies auch versuchen:

preg_match_all('/[A-Z\[\]]+/', $string, $matches); 

Dann habe ich meine drei Saiten, aber ohne die ‚- ‘..

ich versuche es whith preg_split aber ich mein Ziel nicht richtig erreichen:

preg_split("/\[([^\]]+)\]/", $myString); 

Dann habe ich nur meine 2 Strings richtig, aber ohne das Mittelteil mit DDAADD ...

Kann mir jemand dabei helfen?

+1

Müssen Sie nur einen 'DDAADD' Wert erhalten? Oder 'preg_split ('~ [] [] ~', $ s) um 3 Werte wie' $ first', '$ second' und' $ third' zu erhalten? –

+0

ja - ich brauche die 3 Saiten .. danke für deine Antwort! – goldlife

Antwort

2

Verwenden preg_split mit [][]+ regex einem oder mehr [ oder ] Symbolen entsprechen:

$s = "MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL"; 
$arr = preg_split('~[][]+~', $s); 
print_r($arr); 

Ausgabe der sample demo:

Array 
(
    [0] => MYSTRING- 
    [1] => DDAADD 
    [2] => -IS_SO_BEAUTYFULL 
) 

Ein weiterer Ansatz ist es, einen preg_match mit \[([^][]+)] Regex zu verwenden (oder \[([A-Z]+)]):

$s = "MYSTRING-[DDAADD]-IS_SO_BEAUTYFULL"; 
if (preg_match('~\[([A-Z]+)]~', $s, $res)) { 
    echo($res[1] . "\n"); 
} // => DDAADD 
if (preg_match('~\[([^][]+)]~', $s, $res)) { 
    print_r($res[1]); 
} // => DDAADD 

Siehe another demo

Hier \[ ein [ Spieler ([A-Z]+) fängt in Gruppe 1 ein oder mehrere Großbuchstaben (oder [^][]+ Treffer für 1 oder mehr Zeichen andere als [ und ]) und ] entspricht einem wörtlichen ]. Der Wert ist innerhalb $res[1].

+1

das funktioniert für mich .. danke !! – goldlife