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

时间:2016-05-26 08:31:26

标签: php regex

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

array_diff() === []

我尝试使用:

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

然而,它不起作用。

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

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

2 个答案:

答案 0 :(得分:6)

最好使用preg_match()

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

您的匹配数组将存储在$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 >

答案 1 :(得分:4)

我认为你应该使用preg_match因为split会搜索一个分隔符而你在这里没有:

$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);

然后你必须删除$ matches的第一个键:

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