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
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
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:
number:
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)
Ich gebe Ihnen einen Hinweis. Ersetzen Sie Zeug in '()' durch Leerzeichen und passen Sie die verbleibenden Ziffern an. – Rahul
Schnell und schmutzig können Sie explodieren ("", $ string); und nimm einfach die Positionen 0, 5 und 6 – clearshot66
Du könntest sie überspringen, wenn die Klammern immer übereinstimmen, '\ ([^)] + \) (* SKIP) (* FAIL) | \ d +'. – chris85