如何使用正则表达式将字符串拆分为组

Jan*_*sky 3 php regex

我正在尝试使用以下正则表达式将字符串'A123456789123B分成六组:

'/^([A-Z]{1})([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{3})([A-Z]{1})$/'
Run Code Online (Sandbox Code Playgroud)

我试过用:

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

但是,它不起作用.

我需要将字符串拆分成这样的东西:

['A', '123', '456', '789', '123', 'B']
Run Code Online (Sandbox Code Playgroud)

Wil*_*ill 6

它更适合preg_match()用于此:

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

您的匹配数组将存储在$matches.第一个元素$matches将包含匹配的整个字符串,其余元素将是括号中的特定捕获组.我们array_shift()用来删除第一个元素.

这是一个例子:

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 >
Run Code Online (Sandbox Code Playgroud)