Split auf Alternative zwischen [
und ]
, und verwenden Sie die Flagge PREG_SPLIT_NO_EMPTY
keine leeren Teile fangen.
$str = "[10:42-23:10]part1[11:30-13:20]part2";
$parts = preg_split("/\[|\]/", $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($parts);
Ausgang:
Array
(
[0] => 10:42-23:10
[1] => part1
[2] => 11:30-13:20
[3] => part2
)
NB.
Dank @ WiktorStribiżew, seine Regex /[][]/
ist viel effizienter, ich habe ein Benchmark, es ist etwa 40% schneller.
$str = "[10:42-23:10]part1[11:30-13:20]part2";
$parts = preg_split("/[][]/", $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($parts);
Hier ist der Perl-Skript ich verwendet habe, die Benchmark zu tun:
#!/usr/bin/perl
use Benchmark qw(:all);
my $str = "[10:42-23:10]part1[11:30-13:20]part2";
my $count = -5;
cmpthese($count, {
'[][]' => sub {
my @parts = split(/[][]/, $str);
},
'\[|\]' => sub {
my @parts = split(/\[|\]/, $str);
},
});
Ergebnis: (2 Läufe)
>perl -w benchmark.pl
Rate \[|\] [][]
\[|\] 536640/s -- -40%
[][] 891396/s 66% --
>Exit code: 0
>perl -w benchmark.pl
Rate \[|\] [][]
\[|\] 530867/s -- -40%
[][] 885242/s 67% --
>Exit code: 0
Während das Muster ist einfach, du kannst es sogar noch besser schreiben, wie ""/[] []/"' –
@ WiktorStribiżew: True, aber meine Regex erscheint mir lesbarer. Es ist nur ein Punkt von vue – Toto
Sicher, es ist immer eine Frage des Geschmacks/Stils. Ich bevorzuge Präzision und Leistung zur Lesbarkeit. –