2017-05-25 2 views
-1

Wenn ich eine Zeichenfolge wie folgt haben:Wie erfassen Sie alle Zahlen außerhalb von Klammern?

$string = "number: 20 (10 30 10 zzz) 40 60"; 

Wie kann ich alle Zahlen außerhalb der Klammern entsprechen?

Ich möchte nur

20,40,60 
+0

Ich gebe Ihnen einen Hinweis. Ersetzen Sie Zeug in '()' durch Leerzeichen und passen Sie die verbleibenden Ziffern an. – Rahul

+0

Schnell und schmutzig können Sie explodieren ("", $ string); und nimm einfach die Positionen 0, 5 und 6 – clearshot66

+2

Du könntest sie überspringen, wenn die Klammern immer übereinstimmen, '\ ([^)] + \) (* SKIP) (* FAIL) | \ d +'. – chris85

Antwort

1

Hier bekommen, ist ein preg_split() Ansatz:

Eingang:

$string = "number: 20 (10 30 10 zzz) 40 60"; 

One-Liner (Pattern Demo):

var_export(preg_split('/ |number: |\([^)]*\)/',$string,null,PREG_SPLIT_NO_EMPTY)); 

Ausgabe:

array (
    0 => '20', 
    1 => '40', 
    2 => '60', 
) 

Dieses Muster wird explodieren auf:

  • jeden Raum
  • alle number:
  • jeder Klammerausdruck

Edits:

Dieses Muster funktioniert auch mit preg_split(): /[ a-z:]+|\([^)]*\)/i Es ist etwas schneller.

...

chris85 des kommentiert Muster für preg_match() ist richtig. Ich habe es optimiert, indem ich die Alternativen umkehre: \d+|\([^)]+\)(*SKIP)(*FAIL)

Verwandte Themen