2016-07-12 10 views
0

Ich habe die folgende Zeichenfolge:.Mehrere Worte zwischen geschweiften Klammern in PHP

$string = "Hello from {me} to {you}"; 

Was ich will, ist ein Array mit den Worten zwischen den geschweiften Klammern (ohne die geschweiften Klammern natürlich

array(2) { 
    [0]=> 
    string(2) "me" 
    [1]=> 
    string(3) "you" 
} 

ich versuchte, das folgende Muster, aber es zeigt nur ein Wort (mit den Klammern) ausgewählt.

/\{([^}]+)\}/ 

oder

/\{(\s*?.*?)*?\}/ 

Ich bin neu in regulären Ausdrücken.

Dank

+0

Haben Sie 'preg_match_all' probiert? – Script47

+0

@ Script47 ja, ich habe, produziert zwei Arrays mit einem seltsamen Ergebnis. Nicht das Ergebnis, das ich wollte. – yooouuri

+0

Dieser Benutzer [Beitragshinweis] (http://php.net/manual/en/function.preg-match-all.php#101259) gibt '{' und '}' auch zurück: \ – FirstOne

Antwort

1

Verwenden Sie preg_match_all. Im folgenden Code ist $results, was Sie suchen:

$raw_string = "Hello from {me} to {you}"; 
$pattern = "/{(.*?)}/"; //will match everything in { } 

if(preg_match_all($pattern,$raw_string,$matches)): 
    $results = $matches[1]; 
else: 
    //no matches 
endif; 
1

Sie benötigen den dritten Parameter in preg_match_all verwenden, um die angepassten Werte in einem Array zu erhalten.

<?php 

$string = "Hello from {me} to {you}"; 

preg_match_all('/\{([^}]+)\}/', $string, $matches); 

var_dump($matches); 

?> 

Welche produziert,

array(2) { [0]=> array(2) { [0]=> string(4) "{me}" [1]=> string(5) "{you}" } [1]=> array(2) { [0]=> string(2) "me" [1]=> string(3) "you" } } 

Um die saubere Version zu erhalten,

echo $matches[1][yourKey]; 

Lesestoff

preg_match_all();

+0

@FirstOne haha, beide * vor 1 Minute *! Es zeigte die Benachrichtigung über den Show-Kommentar, als ich die Antwort gepostet habe. – Script47

+0

@FirstOne yep, ich schloss das unten ein, wollte nur die gesamte Ausgabe für das Interesse des OP zeigen. – Script47

0

$ string = "Hallo von {me} zu {Sie}";

preg_match_all ('/ {([^}] +)} /', $ string, $ Übereinstimmungen);

print_r ($ Übereinstimmungen [Anzahl ($ Übereinstimmungen) -1]);