2016-03-18 12 views
1

Ich habe eine Zeichenfolge, die ein Muster wiederholt. Ich habe einen regulären Ausdruck, der dem Muster entspricht, aber ich möchte sie stattdessen teilen.Wie wiederhole ich das Muster?

$target = 'a1v33a33v55a2v43'; 

Ich mag würde sie in a1v33, a33v55 und a2v43 aufzuspalten. Grundsätzlich möchte ich die Zeichenfolge in ein Array von ['a1v33', 'a33v55', 'a2v43'] aufteilen.

Ich habe den folgenden Code versucht, aber es entspricht nur dem Muster. Wie kann ich sie stattdessen teilen?

$target = 'a1v33a33v55a2v43'; 
$pattern = '/(a[0-9]+v[0-9]+)*$/im'; 

preg_match($pattern, $target, $match); 

echo '<pre>'; 
print_r($match); 

Antwort

5

können Sie preg_split verwenden:

$result = preg_split('~(?=a)~i', $target, -1, PREG_SPLIT_NO_EMPTY); 
+1

ich dieses mögen wegen seiner einfachen Eleganz - chapeau :) – Jan

4

Verwenden preg_match_all mit '/a[0-9]+v[0-9]+/i':

$target = 'a1v33a33v55a2v43'; 
$pattern = '/a[0-9]+v[0-9]+/i'; 
preg_match_all($pattern, $target, $match); 
print_r($match); 

den See IDEONE demo

Das /(a[0-9]+v[0-9]+)*$/im Muster paßt einig Teil Treffen a[0-9]+v[0-9]+ Muster, 1 oder mehr Vorkommen, bis zum Ende der Schnur ($). Wenn wir die quantifizierte Gruppierung mit dem End-of-Line-/String-Anker entfernen, können wir individuelle Tokens zuordnen.

Verwandte Themen