3v4l.org

run code in 300+ PHP versions simultaneously
<?php $barcode = ']d201070462608682672140097289158930[GS]10101656[GS]17261130'; preg_match_all('/^]d2(?: 01(?P<g01>.{14})| 10(?P<g10>(?:(?!\[GS]).){1,20})(?:\[GS]|$)| 17(?P<g17>.{6})| 21(?P<g21>(?:(?!\[GS]).){1,20})(?:\[GS]|$) )+$/x', $barcode, $matches); print_r($matches);
Output for 7.4.30, 8.1.23 - 8.1.33, 8.2.10 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
Array ( [0] => Array ( [0] => ]d201070462608682672140097289158930[GS]10101656[GS]17261130 ) [g01] => Array ( [0] => 07046260868267 ) [1] => Array ( [0] => 07046260868267 ) [g10] => Array ( [0] => 101656 ) [2] => Array ( [0] => 101656 ) [g17] => Array ( [0] => 261130 ) [3] => Array ( [0] => 261130 ) [g21] => Array ( [0] => 40097289158930 ) [4] => Array ( [0] => 40097289158930 ) )

preferences:
76.98 ms | 408 KiB | 5 Q