我正在尝试使用以下正则表达式将字符串'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');
答案 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)
}