我正尝试在php中拆分一个字符串,如下所示:
ABCDE1234ABCD1234ABCDEF1234
转换为字符串数组,在本例中,将如下所示:
ABCDE1234
ABCD1234
ABCDEF1234
因此,模式是“未定义的字母数量,然后是4位数字,然后是未定义的字母数量和4位数字等等。”
我尝试使用preg_split拆分字符串,如下所示:
$pattern = "#[0-9]{4}$#";
preg_split($pattern, $stringToSplit);
并且它返回一个在第一个元素中包含完整字符串(未拆分)的数组。
我猜这里的问题是我的正则表达式,因为我不完全理解如何使用它们,并且我不确定我是否正确地使用它。
那么正确的正则表达式应该是什么呢?
发布于 2016-11-03 21:51:39
你不想要preg_split
,你想要preg_match_all
$str = 'ABCDE1234ABCD1234ABCDEF1234';
preg_match_all('/[a-z]+[0-9]{4}/i', $str, $matches);
var_dump($matches);
输出:
array(1) {
[0]=>
array(3) {
[0]=>
string(9) "ABCDE1234"
[1]=>
string(8) "ABCD1234"
[2]=>
string(10) "ABCDEF1234"
}
}
发布于 2016-11-03 21:58:18
我不擅长正则表达式,所以下面是较少人使用的方法:
<?php
$s = 'ABCDE1234ABCD1234ABCDEF1234';
$nums = range(0,9);
$num_hit = 0;
$i = 0;
$arr = array();
foreach(str_split($s) as $v)
{
if(isset($nums[$v]))
{
++$num_hit;
}
if(!isset($arr[$i]))
{
$arr[$i] = '';
}
$arr[$i].= $v;
if($num_hit === 4)
{
++$i;
$num_hit = 0;
}
}
print_r($arr);
https://stackoverflow.com/questions/40403041
复制相似问题