2016-05-26 8 views
3

Ich versuche, die Zeichenfolge ‚A123456789123B‘ in sechs Gruppen mit dem folgenden regulären Ausdruck zu spalten:Wie kann ich geteilt Zeichenfolge in Gruppen mit regex

'/^([A-Z]{1})([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{3})([A-Z]{1})$/' 

ich versuchte mit:

preg_split('/^([A-Z]{1})([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{3})([A-Z]{1})$/', 'A123456789123B'); 

Es funktioniert jedoch nicht.

Ich brauche die Zeichenfolge in etwa wie folgt aufgeteilt:

['A', '123', '456', '789', '123', 'B'] 
+0

Ist die Anzahl der Zeichen in jedem Block festgelegt? – user4035

+0

Hätte mir preg_split mit reset gedacht: ['(?: ^. | ...) \ K'] (https://regex101.com/r/lD1vI7/1) aber das ergibt interessanterweise [verschiedene Ergebnisse in verschiedenen php Versionen] (https://3v4l.org/aJ0nT). –

Antwort

5

Es wäre besser geeignet preg_match() für diesen Einsatz:

preg_match('/^([A-Z]{1})(\d{3})(\d{3})(\d{3})(\d{3})([A-Z]{1})$/', 'A123456789123B', $matches); 
array_shift($matches); 

Ihre Auswahl an Spielen wird in $matches gespeichert werden. Das erste Element von $matches enthält die übereinstimmende ganze Zeichenfolge und die verbleibenden Elemente sind die spezifischen einfangenden Gruppen in den Klammern. Wir verwenden array_shift(), um das erste Element zu entfernen.

Hier ist ein Beispiel:

php > var_dump(preg_match('/^([A-Z]{1})(\d{3})(\d{3})(\d{3})(\d{3})([A-Z]{1})$/', 'A123456789123B', $matches)); 
int(1) 
php > var_dump($matches); 
array(7) { 
    [0]=> 
    string(14) "A123456789123B" 
    [1]=> 
    string(1) "A" 
    [2]=> 
    string(3) "123" 
    [3]=> 
    string(3) "456" 
    [4]=> 
    string(3) "789" 
    [5]=> 
    string(3) "123" 
    [6]=> 
    string(1) "B" 
} 
php > array_shift($matches); 
php > var_dump($matches); 
array(6) { 
    [0]=> 
    string(1) "A" 
    [1]=> 
    string(3) "123" 
    [2]=> 
    string(3) "456" 
    [3]=> 
    string(3) "789" 
    [4]=> 
    string(3) "123" 
    [5]=> 
    string(1) "B" 
} 
php > 
4

Ich glaube, Sie lieber preg_match Ursache Split für einen Separator sucht verwenden sollten, und Sie haben keine hier:

$str = 'A123456789123B'; 
preg_match('/^([A-Z]{1})([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{3})([A-Z]{1})$/', $str, $matches); 
var_dump($matches); 

Dann werden Sie die entfernen müssen erster Schlüssel von $ passt:

if ($matches) { 
    array_shift($matches) 
} 
Verwandte Themen